Apache http客户端在输入请求的multipart上抛出错误

时间:2014-04-08 19:59:43

标签: apache web-services http multipartform-data

我正在调用一个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”

     

“Content-Disposition:form-data; 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)不使用标头中的边界标记,但它仍指定有效负载中的边界,我猜,这导致请求失败。

有没有人遇到类似的情况?任何指针都会非常感激。提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您使用HTTP客户端手动设置内容类型,则可能会使用边界字符串清除内容类型HTTP客户端集。

您应该只为每个部分设置内容类型,而不是整个HTTP请求。见https://hc.apache.org/httpcomponents-client-4.3.x/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntityBuilder.html