Skip to content

Commit 7361175

Browse files
committed
Fixes #293, added property url to BaseResponse. related work(#321)
1 parent 87d4379 commit 7361175

File tree

8 files changed

+29
-0
lines changed

8 files changed

+29
-0
lines changed

lib/src/base_request.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ abstract class BaseRequest {
136136
contentLength: response.contentLength,
137137
request: response.request,
138138
headers: response.headers,
139+
url: response.url,
139140
isRedirect: response.isRedirect,
140141
persistentConnection: response.persistentConnection,
141142
reasonPhrase: response.reasonPhrase);

lib/src/base_response.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ abstract class BaseResponse {
2929
// TODO(nweiz): make this a HttpHeaders object.
3030
final Map<String, String> headers;
3131

32+
/// The url of the final response(possibly after redirections).
33+
final String? url;
34+
3235
final bool isRedirect;
3336

3437
/// Whether the server requested that a persistent connection be maintained.
@@ -38,6 +41,7 @@ abstract class BaseResponse {
3841
{this.contentLength,
3942
this.request,
4043
this.headers = const {},
44+
this.url,
4145
this.isRedirect = false,
4246
this.persistentConnection = true,
4347
this.reasonPhrase}) {

lib/src/io_client.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ class IOClient extends BaseClient {
5858
response.contentLength == -1 ? null : response.contentLength,
5959
request: request,
6060
headers: headers,
61+
url: response.redirects.isEmpty
62+
? request.url.toString()
63+
: response.redirects.last.location.toString(),
6164
isRedirect: response.isRedirect,
6265
persistentConnection: response.persistentConnection,
6366
reasonPhrase: response.reasonPhrase,

lib/src/io_streamed_response.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class IOStreamedResponse extends StreamedResponse {
2121
{int? contentLength,
2222
BaseRequest? request,
2323
Map<String, String> headers = const {},
24+
String? url,
2425
bool isRedirect = false,
2526
bool persistentConnection = true,
2627
String? reasonPhrase,
@@ -30,6 +31,7 @@ class IOStreamedResponse extends StreamedResponse {
3031
contentLength: contentLength,
3132
request: request,
3233
headers: headers,
34+
url: url,
3335
isRedirect: isRedirect,
3436
persistentConnection: persistentConnection,
3537
reasonPhrase: reasonPhrase);

lib/src/response.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ class Response extends BaseResponse {
3131
Response(String body, int statusCode,
3232
{BaseRequest? request,
3333
Map<String, String> headers = const {},
34+
String? url,
3435
bool isRedirect = false,
3536
bool persistentConnection = true,
3637
String? reasonPhrase})
3738
: this.bytes(_encodingForHeaders(headers).encode(body), statusCode,
3839
request: request,
3940
headers: headers,
41+
url: url,
4042
isRedirect: isRedirect,
4143
persistentConnection: persistentConnection,
4244
reasonPhrase: reasonPhrase);
@@ -45,6 +47,7 @@ class Response extends BaseResponse {
4547
Response.bytes(List<int> bodyBytes, int statusCode,
4648
{BaseRequest? request,
4749
Map<String, String> headers = const {},
50+
String? url,
4851
bool isRedirect = false,
4952
bool persistentConnection = true,
5053
String? reasonPhrase})
@@ -53,6 +56,7 @@ class Response extends BaseResponse {
5356
contentLength: bodyBytes.length,
5457
request: request,
5558
headers: headers,
59+
url: url,
5660
isRedirect: isRedirect,
5761
persistentConnection: persistentConnection,
5862
reasonPhrase: reasonPhrase);
@@ -64,6 +68,7 @@ class Response extends BaseResponse {
6468
return Response.bytes(body, response.statusCode,
6569
request: response.request,
6670
headers: response.headers,
71+
url: response.url,
6772
isRedirect: response.isRedirect,
6873
persistentConnection: response.persistentConnection,
6974
reasonPhrase: response.reasonPhrase);

lib/src/streamed_response.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class StreamedResponse extends BaseResponse {
2222
{int? contentLength,
2323
BaseRequest? request,
2424
Map<String, String> headers = const {},
25+
String? url,
2526
bool isRedirect = false,
2627
bool persistentConnection = true,
2728
String? reasonPhrase})
@@ -30,6 +31,7 @@ class StreamedResponse extends BaseResponse {
3031
contentLength: contentLength,
3132
request: request,
3233
headers: headers,
34+
url: url,
3335
isRedirect: isRedirect,
3436
persistentConnection: persistentConnection,
3537
reasonPhrase: reasonPhrase);

test/io/request_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,15 @@ void main() {
4444
final response = await request.send();
4545

4646
expect(response.statusCode, equals(302));
47+
expect(response.url, equals(serverUrl.resolve('/redirect').toString()));
4748
});
4849

4950
test('with redirects', () async {
5051
final request = http.Request('GET', serverUrl.resolve('/redirect'));
5152
final response = await request.send();
5253

5354
expect(response.statusCode, equals(200));
55+
expect(response.url, equals(serverUrl.resolve('/').toString()));
5456
final bytesString = await response.stream.bytesToString();
5557
expect(bytesString, parse(containsPair('path', '/')));
5658
});

test/response_test.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,15 @@ void main() {
6969
var response = await http.Response.fromStream(streamResponse);
7070
expect(response.bodyBytes, equals([104, 101, 108, 108, 111]));
7171
});
72+
73+
test('sets url', () async {
74+
var controller = StreamController<List<int>>(sync: true);
75+
var streamResponse = http.StreamedResponse(controller.stream, 302,
76+
contentLength: 5, url: 'https://example.com');
77+
controller.add([104, 101, 108, 108, 111]);
78+
unawaited(controller.close());
79+
var response = await http.Response.fromStream(streamResponse);
80+
expect(response.url, equals('https://example.com'));
81+
});
7282
});
7383
}

0 commit comments

Comments
 (0)