Skip to content

Commit ba79f4d

Browse files
committed
Keep body on strict 302 and 307, close AsyncHttpClient#939
1 parent 4a917c8 commit ba79f4d

File tree

1 file changed

+14
-2
lines changed
  • src/main/java/com/ning/http/client/providers/netty/handler

1 file changed

+14
-2
lines changed

src/main/java/com/ning/http/client/providers/netty/handler/Protocol.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.ning.http.client.providers.netty.future.NettyResponseFuture;
4444
import com.ning.http.client.providers.netty.request.NettyRequestSender;
4545
import com.ning.http.client.uri.Uri;
46+
import com.ning.http.util.MiscUtils;
4647

4748
import java.io.IOException;
4849
import java.util.HashSet;
@@ -118,8 +119,8 @@ protected boolean exitAfterHandlingRedirect(//
118119
future.getAndSetAuth(false);
119120

120121
String originalMethod = request.getMethod();
121-
boolean switchToGet = !originalMethod.equals("GET")
122-
&& (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling()));
122+
boolean switchToGet = !originalMethod.equals("GET") && (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling()));
123+
boolean keepBody = statusCode == 307 || (statusCode == 302 && config.isStrict302Handling());
123124

124125
final RequestBuilder requestBuilder = new RequestBuilder(switchToGet ? "GET" : originalMethod)//
125126
.setCookies(request.getCookies())//
@@ -131,6 +132,17 @@ protected boolean exitAfterHandlingRedirect(//
131132
.setRealm(request.getRealm())//
132133
.setRequestTimeout(request.getRequestTimeout())//
133134
.setVirtualHost(request.getVirtualHost());
135+
if (keepBody) {
136+
requestBuilder.setBodyEncoding(request.getBodyEncoding());
137+
if (MiscUtils.isNonEmpty(request.getFormParams()))
138+
requestBuilder.setFormParams(request.getFormParams());
139+
if (request.getStringData() != null)
140+
requestBuilder.setBody(request.getStringData());
141+
if (request.getByteData() != null)
142+
requestBuilder.setBody(request.getByteData());
143+
if (request.getBodyGenerator() != null)
144+
requestBuilder.setBody(request.getBodyGenerator());
145+
}
134146

135147
requestBuilder.setHeaders(propagatedHeaders(request, realm, switchToGet));
136148

0 commit comments

Comments
 (0)