Skip to content

Commit 00e78c9

Browse files
author
Stephane Landelle
committed
Netty: allow passing a body with all HTTP methods, close AsyncHttpClient#421
1 parent 1a13ee2 commit 00e78c9

File tree

1 file changed

+56
-59
lines changed

1 file changed

+56
-59
lines changed

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -791,74 +791,71 @@ else if (uri.getRawQuery() != null)
791791
nettyRequest.setHeader(HttpHeaders.Names.COOKIE, CookieEncoder.encodeClientSide(request.getCookies(), config.isRfc6265CookieEncoding()));
792792
}
793793

794-
String reqType = request.getMethod();
795-
if (!"GET".equals(reqType) && !"HEAD".equals(reqType) && !"OPTION".equals(reqType) && !"TRACE".equals(reqType)) {
796-
797-
String bodyCharset = request.getBodyEncoding() == null ? DEFAULT_CHARSET : request.getBodyEncoding();
798-
799-
// We already have processed the body.
800-
if (buffer != null && buffer.writerIndex() != 0) {
801-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, buffer.writerIndex());
802-
nettyRequest.setContent(buffer);
803-
} else if (request.getByteData() != null) {
804-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(request.getByteData().length));
805-
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(request.getByteData()));
806-
} else if (request.getStringData() != null) {
807-
byte[] bytes = request.getStringData().getBytes(bodyCharset);
808-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(bytes.length));
809-
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(bytes));
810-
} else if (request.getStreamData() != null) {
811-
int[] lengthWrapper = new int[1];
812-
byte[] bytes = AsyncHttpProviderUtils.readFully(request.getStreamData(), lengthWrapper);
813-
int length = lengthWrapper[0];
814-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(length));
815-
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(bytes, 0, length));
816-
} else if (isNonEmpty(request.getParams())) {
817-
StringBuilder sb = new StringBuilder();
818-
for (final Entry<String, List<String>> paramEntry : request.getParams()) {
819-
final String key = paramEntry.getKey();
820-
for (final String value : paramEntry.getValue()) {
821-
if (sb.length() > 0) {
822-
sb.append("&");
823-
}
824-
UTF8UrlEncoder.appendEncoded(sb, key);
825-
sb.append("=");
826-
UTF8UrlEncoder.appendEncoded(sb, value);
794+
String bodyCharset = request.getBodyEncoding() == null ? DEFAULT_CHARSET : request.getBodyEncoding();
795+
796+
// We already have processed the body.
797+
if (buffer != null && buffer.writerIndex() != 0) {
798+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, buffer.writerIndex());
799+
nettyRequest.setContent(buffer);
800+
} else if (request.getByteData() != null) {
801+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(request.getByteData().length));
802+
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(request.getByteData()));
803+
} else if (request.getStringData() != null) {
804+
System.err.println("!!!!HEY STRING DATA");
805+
byte[] bytes = request.getStringData().getBytes(bodyCharset);
806+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(bytes.length));
807+
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(bytes));
808+
} else if (request.getStreamData() != null) {
809+
int[] lengthWrapper = new int[1];
810+
byte[] bytes = AsyncHttpProviderUtils.readFully(request.getStreamData(), lengthWrapper);
811+
int length = lengthWrapper[0];
812+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(length));
813+
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(bytes, 0, length));
814+
} else if (isNonEmpty(request.getParams())) {
815+
StringBuilder sb = new StringBuilder();
816+
for (final Entry<String, List<String>> paramEntry : request.getParams()) {
817+
final String key = paramEntry.getKey();
818+
for (final String value : paramEntry.getValue()) {
819+
if (sb.length() > 0) {
820+
sb.append("&");
827821
}
822+
UTF8UrlEncoder.appendEncoded(sb, key);
823+
sb.append("=");
824+
UTF8UrlEncoder.appendEncoded(sb, value);
828825
}
829-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(sb.length()));
830-
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(sb.toString().getBytes(bodyCharset)));
826+
}
827+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(sb.length()));
828+
nettyRequest.setContent(ChannelBuffers.wrappedBuffer(sb.toString().getBytes(bodyCharset)));
831829

832-
if (!request.getHeaders().containsKey(HttpHeaders.Names.CONTENT_TYPE)) {
833-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_TYPE, HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED);
834-
}
830+
if (!request.getHeaders().containsKey(HttpHeaders.Names.CONTENT_TYPE)) {
831+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_TYPE, HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED);
832+
}
835833

836-
} else if (request.getParts() != null) {
837-
MultipartRequestEntity mre = AsyncHttpProviderUtils.createMultipartRequestEntity(request.getParts(), request.getHeaders());
834+
} else if (request.getParts() != null) {
835+
MultipartRequestEntity mre = AsyncHttpProviderUtils.createMultipartRequestEntity(request.getParts(), request.getHeaders());
838836

839-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_TYPE, mre.getContentType());
840-
if (mre.getContentLength() >= 0) {
841-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(mre.getContentLength()));
842-
}
837+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_TYPE, mre.getContentType());
838+
if (mre.getContentLength() >= 0) {
839+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(mre.getContentLength()));
840+
}
843841

844-
} else if (request.getEntityWriter() != null) {
845-
int length = (int) request.getContentLength();
842+
} else if (request.getEntityWriter() != null) {
843+
int length = (int) request.getContentLength();
846844

847-
if (length == -1) {
848-
length = MAX_BUFFERED_BYTES;
849-
}
845+
if (length == -1) {
846+
length = MAX_BUFFERED_BYTES;
847+
}
850848

851-
ChannelBuffer b = ChannelBuffers.dynamicBuffer(length);
852-
request.getEntityWriter().writeEntity(new ChannelBufferOutputStream(b));
853-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, b.writerIndex());
854-
nettyRequest.setContent(b);
855-
} else if (request.getFile() != null) {
856-
File file = request.getFile();
857-
if (!file.isFile()) {
858-
throw new IOException(String.format("File %s is not a file or doesn't exist", file.getAbsolutePath()));
859-
}
860-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, file.length());
849+
ChannelBuffer b = ChannelBuffers.dynamicBuffer(length);
850+
request.getEntityWriter().writeEntity(new ChannelBufferOutputStream(b));
851+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, b.writerIndex());
852+
nettyRequest.setContent(b);
853+
} else if (request.getFile() != null) {
854+
File file = request.getFile();
855+
if (!file.isFile()) {
856+
throw new IOException(String.format("File %s is not a file or doesn't exist", file.getAbsolutePath()));
861857
}
858+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, file.length());
862859
}
863860
}
864861
return nettyRequest;

0 commit comments

Comments
 (0)