我正在调用一个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)不使用标头中的边界标记,但它仍指定有效负载中的边界,我猜,这导致请求失败。
有没有人遇到类似的情况?任何指针都会非常感激。提前致谢。
答案 0 :(得分:1)
如果您使用HTTP客户端手动设置内容类型,则可能会使用边界字符串清除内容类型HTTP客户端集。
您应该只为每个部分设置内容类型,而不是整个HTTP请求。见https://hc.apache.org/httpcomponents-client-4.3.x/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntityBuilder.html