43
43
import com .ning .http .client .providers .netty .future .NettyResponseFuture ;
44
44
import com .ning .http .client .providers .netty .request .NettyRequestSender ;
45
45
import com .ning .http .client .uri .Uri ;
46
+ import com .ning .http .util .MiscUtils ;
46
47
47
48
import java .io .IOException ;
48
49
import java .util .HashSet ;
@@ -118,8 +119,8 @@ protected boolean exitAfterHandlingRedirect(//
118
119
future .getAndSetAuth (false );
119
120
120
121
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 ());
123
124
124
125
final RequestBuilder requestBuilder = new RequestBuilder (switchToGet ? "GET" : originalMethod )//
125
126
.setCookies (request .getCookies ())//
@@ -131,6 +132,17 @@ protected boolean exitAfterHandlingRedirect(//
131
132
.setRealm (request .getRealm ())//
132
133
.setRequestTimeout (request .getRequestTimeout ())//
133
134
.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
+ }
134
146
135
147
requestBuilder .setHeaders (propagatedHeaders (request , realm , switchToGet ));
136
148
0 commit comments