Showing
3 changed files
with
23 additions
and
2 deletions
@@ -170,7 +170,6 @@ static NSError *ASITooMuchRedirectionError; | @@ -170,7 +170,6 @@ static NSError *ASITooMuchRedirectionError; | ||
170 | [requestHeaders setObject:value forKey:header]; | 170 | [requestHeaders setObject:value forKey:header]; |
171 | } | 171 | } |
172 | 172 | ||
173 | - | ||
174 | // This function will be called either just before a request starts, or when postLength is needed, whichever comes first | 173 | // This function will be called either just before a request starts, or when postLength is needed, whichever comes first |
175 | // postLength must be set by the time this function is complete | 174 | // postLength must be set by the time this function is complete |
176 | - (void)buildPostBody | 175 | - (void)buildPostBody |
@@ -1022,8 +1021,16 @@ static NSError *ASITooMuchRedirectionError; | @@ -1022,8 +1021,16 @@ static NSError *ASITooMuchRedirectionError; | ||
1022 | } | 1021 | } |
1023 | } | 1022 | } |
1024 | // Do we need to redirect? | 1023 | // Do we need to redirect? |
1025 | - if ([self shouldRedirect]) { | 1024 | + if ([self shouldRedirect] && [responseHeaders valueForKey:@"Location"]) { |
1026 | if ([self responseStatusCode] > 300 && [self responseStatusCode] < 308 && [self responseStatusCode] != 304) { | 1025 | if ([self responseStatusCode] > 300 && [self responseStatusCode] < 308 && [self responseStatusCode] != 304) { |
1026 | + if ([self responseStatusCode] == 303) { | ||
1027 | + [self setRequestMethod:@"GET"]; | ||
1028 | + [self setPostBody:nil]; | ||
1029 | + [self setPostLength:0]; | ||
1030 | + [self setPostBodyFilePath:nil]; | ||
1031 | + [self setPostBodyWriteStream:nil]; | ||
1032 | + [self setRequestHeaders:nil]; | ||
1033 | + } | ||
1027 | [self setURL:[[NSURL URLWithString:[responseHeaders valueForKey:@"Location"] relativeToURL:[self url]] absoluteURL]]; | 1034 | [self setURL:[[NSURL URLWithString:[responseHeaders valueForKey:@"Location"] relativeToURL:[self url]] absoluteURL]]; |
1028 | [self setNeedsRedirect:YES]; | 1035 | [self setNeedsRedirect:YES]; |
1029 | } | 1036 | } |
@@ -36,4 +36,5 @@ | @@ -36,4 +36,5 @@ | ||
36 | - (void)testRedirectPreservesSession; | 36 | - (void)testRedirectPreservesSession; |
37 | - (void)testTooMuchRedirection; | 37 | - (void)testTooMuchRedirection; |
38 | - (void)testRedirectToNewDomain; | 38 | - (void)testRedirectToNewDomain; |
39 | +- (void)test303Redirect; | ||
39 | @end | 40 | @end |
@@ -667,4 +667,17 @@ | @@ -667,4 +667,17 @@ | ||
667 | GHAssertTrue(success,@"Failed to redirect to a different domain"); | 667 | GHAssertTrue(success,@"Failed to redirect to a different domain"); |
668 | } | 668 | } |
669 | 669 | ||
670 | +// Ensure request method changes to get | ||
671 | +- (void)test303Redirect | ||
672 | +{ | ||
673 | + ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://asi/ASIHTTPRequest/tests/redirect_303"]]; | ||
674 | + [request setRequestMethod:@"PUT"]; | ||
675 | + [request appendPostData:[@"Fuzzy" dataUsingEncoding:NSUTF8StringEncoding]]; | ||
676 | + [request start]; | ||
677 | + BOOL success = [[[request url] absoluteString] isEqualToString:@"http://asi/ASIHTTPRequest/tests/request-method"]; | ||
678 | + GHAssertTrue(success,@"Failed to redirect to correct location"); | ||
679 | + success = [[request responseString] isEqualToString:@"GET"]; | ||
680 | + GHAssertTrue(success,@"Failed to use GET on new URL"); | ||
681 | +} | ||
682 | + | ||
670 | @end | 683 | @end |
-
Please register or login to post a comment