邮寄要求来自邮递员,但不适用于cURL

时间:2019-08-02 05:02:29

标签: curl postman

我正在尝试将多部分文件上传到服务器。但是,发布请求在与Postman一起尝试时可以正常工作,但是在使用cURL调用时返回java异常

  

下面的服务返回Java异常。

代码部分:

curl -X POST \
  http://localhost:49901/capital/rest/v1/projects/UID4d99e5-1669f58e3f2-e6726ae9eef110442b36e368eca820c9/harnessdesigns/UID56a429-1669a3c70b3-e6726ae9eef110442b36e368eca820c9/attacheddata \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Cookie: JSESSIONID=node0rhpkec0q1a521nz49bq6c0dy93.node0' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F attachment=@/C:/Users/cabpq1/Desktop/CapitalData/ImportSpliceBundleInfoFile.json \
  -F 'customdata={"attributes":{"name":"AttachedData4","type":"type1","key":"key"}}'

响应部分:

<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /capital/rest/v1/projects/UID4d99e5-1669f58e3f2-e6726ae9eef110442b36e368eca820c9/harnessdesigns/UID56a429-1669a3c70b3-e6726ae9eef110442b36e368eca820c9/attacheddata. Reason:
<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>javax.servlet.ServletException: javax.ws.rs.ProcessingException: java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 30000/30000 ms
        at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
        at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)`enter code here`
        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)

2 个答案:

答案 0 :(得分:0)

您的回复清楚地表明超时。

java.util.concurrent.TimeoutException: Idle timeout expired: 30000/30000 ms

在邮递员中检查配置

  

请求超时(以毫秒为单位)(0为无穷大):设置应用在等待服务器未响应之前应等待多长时间。值为0表示无穷大-邮递员将永远等待响应。

curl可以实现相同的目的,curl具有两个选项:--connect-timeout和--max-time

在curl手册页中

  

-连接超时       您允许连接到       服务器。

     

-m,-最大时间       您允许整个操作完成的最长时间(以秒为单位)       

答案 1 :(得分:0)

客户端

首先,您使用了curl的-F选项,该选项执行多部分表单发布,但您设置了Content-Type: application/x-www-form-urlencoded。似乎不太可能是正确的。

然后您再次将content-type:设置为 ,这次将其设置为“ multipart / form-data;”。 (这是-F的默认值)。

确定需要像这样修饰边界字符串吗?这很不寻常。

您正在传递硬编码的cookie内容,这很少是服务器端所期望的。

(如果您想进行POST并使用-d或-F,则不应该使用{{> {em} )

服务器端

这是一个500的响应代码,这是服务器错误,客户端确实不应该触发...

调试此

在curl命令行中添加-X POST,您将准确地了解curl发送(和接收)的内容,然后将其与工作版本进行比较并进行相应调整。