Apache http客户端在输入请求的多部分上抛出错误
Posted
技术标签:
【中文标题】Apache http客户端在输入请求的多部分上抛出错误【英文标题】:Apache http client throws error on multipart for input request 【发布时间】:2014-05-21 17:40:42 【问题描述】:我正在调用一个 Web 服务,它需要一些字符串数据作为多部分表单输入。
POST /add_or_update HTTP/1.1
User-Agent: Apache-HttpClient/4.3.3 (java 1.5)
Host: localhost:8011
Accept: */*
token:728-e087-ca01-08d34
Content-Length: 691
Expect: 100-continue
Content-Type: multipart/form-data; charset=ISO-8859-1
"--Kd2aTBM_weD045iHeEcrWPLhENlKkH_L6oBz"
“内容配置:表单数据;name="abc" "first""
"--Kd2aTBM_weD045iHeEcrWPLhENlKkH_L6oBz"
"Content-Disposition : form-data; name="type" "AD""
如果我使用的是 Apache HTTP 客户端,底层服务似乎会抛出错误。
Invalid boundary in multipart form ''
如果我通过 CURL 发出同样的请求,它似乎可以按预期工作。这是它的标题。
POST /add_or_update HTTP/1.1
User-Agent: curl/7.27.0
Host: localhost:8011
Accept: */*
token:728-001-ca01-08d34
Content-Length: 691
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------626b33b5dc95
我注意到的唯一区别是 Apache HTTP 客户端 (4.2) 不使用标头中的边界标记,但它仍然指定有效负载中的边界,我猜这会导致请求失败。
有人遇到过类似情况吗?任何指针将不胜感激。提前致谢。
【问题讨论】:
Apache是http服务器,curl是http客户端 Apache 也有 http 客户端库。 hc.apache.org/httpclient-3.x 【参考方案1】:如果您使用 HTTP 客户端手动设置内容类型,您可能会使用边界字符串清除 HTTP 客户端设置的内容类型。
您应该只为每个部分而不是整个 HTTP 请求设置内容类型。见https://hc.apache.org/httpcomponents-client-4.3.x/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntityBuilder.html
【讨论】:
以上是关于Apache http客户端在输入请求的多部分上抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从文件系统发送包含 json 字符串和大文件的多部分数据的 HTTP 请求?
POST 方法在 npm http-server 上抛出错误 405