阿帕奇 HttpClient。如何使用编码正确生成多部分请求
Apache HttpClient. How to properly produce multipart requests with Encoding
类似于已经存在的问题
想要生成一个 http 请求,包含一个文件和一个 key=val 对。
目前代码如下:
HttpPost post = new HttpPost("http://localhost/mainform.cgi/auto_config.htm");
HttpEntity ent = MultipartEntityBuilder.create()
.addTextBody("TYPE", "6",ContentType.TEXT_BINARY)
.addBinaryBody("upname", new File("factory.cfg"),ContentType.APPLICATION_OCTET_STREAM,"factory.cfg")
.build();
这只是作为实体应用于 HttpPost object 并传递给客户端。
发送到具有 lighthttp 服务 运行 的 linux-type 设备(黑盒)。问题是,当我发送此请求时,我没有看到设备的响应(物理的,并且 HttpEntity 总是 returns 默认 200 OK)。
通过 Wireshark,我注意到了两个不同之处,我非常感谢能在这方面得到一些帮助:
1. multipart 元素有一个额外的 header(与原始请求相比)- Content-transfer-encoding,我认为这可能是失败的原因。
2. 内容长度差异很大
所以第一个问题是 - 如何处理编码?
找到失败点。需要添加:
.addTextBody("TYPE", "6",ContentType.WILDCARD)
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName("UTF-8"))
类似于已经存在的问题
想要生成一个 http 请求,包含一个文件和一个 key=val 对。
目前代码如下:
HttpPost post = new HttpPost("http://localhost/mainform.cgi/auto_config.htm");
HttpEntity ent = MultipartEntityBuilder.create()
.addTextBody("TYPE", "6",ContentType.TEXT_BINARY)
.addBinaryBody("upname", new File("factory.cfg"),ContentType.APPLICATION_OCTET_STREAM,"factory.cfg")
.build();
这只是作为实体应用于 HttpPost object 并传递给客户端。
发送到具有 lighthttp 服务 运行 的 linux-type 设备(黑盒)。问题是,当我发送此请求时,我没有看到设备的响应(物理的,并且 HttpEntity 总是 returns 默认 200 OK)。
通过 Wireshark,我注意到了两个不同之处,我非常感谢能在这方面得到一些帮助: 1. multipart 元素有一个额外的 header(与原始请求相比)- Content-transfer-encoding,我认为这可能是失败的原因。 2. 内容长度差异很大
所以第一个问题是 - 如何处理编码?
找到失败点。需要添加:
.addTextBody("TYPE", "6",ContentType.WILDCARD)
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName("UTF-8"))