【问题标题】:Post Request works from Postman but not from cURLPost Request 适用于 Postman,但不适用于 cURL
【发布时间】:2019-08-02 05:02:29
【问题描述】:

我正在尝试将多部分文件上传到服务器。但是,使用 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)

【问题讨论】:

    标签: curl postman


    【解决方案1】:

    您的回复明确表示超时。

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

    在 Postman 中检查配置

    以毫秒为单位的请求超时(0 表示无穷大):设置应用程序在说服务器没有响应之前应等待响应的时间。值 0 表示无穷大 - Postman 将永远等待响应。

    同样的事情可以用 curl 来实现,curl 有两个选项:--connect-timeout 和 --max-time

    来自 curl 手册页

    --连接超时 允许连接的最长时间(以秒为单位) 服务器要占用。

    -m, --max-time 允许整个操作执行的最长时间(以秒为单位) 拿走。

    【讨论】:

      【解决方案2】:

      客户端

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

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

      确定你需要像那样摆弄边界字符串吗?这很不寻常。

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

      (如果您想要一个 POST 并使用 -d 或 -F,则应该使用-X POST

      服务器端

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

      调试这个

      --trace-ascii logfile.txt 添加到 curl 命令行,您将确切地看到 curl 发送(和接收)的内容,然后您可以将其与工作版本进行比较并进行相应调整。 p>

      【讨论】:

        猜你喜欢
        • 2015-09-19
        • 2020-04-23
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 2022-01-21
        • 2017-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多