如何向webserver发送正确的curl命令

时间:2016-02-07 17:21:23

标签: api curl

所以我得到了发送到特定服务器的数据。现在我想使用来自我本地机器的curl来做同样的事情来解决服务器上的特定repsonses并了解更多关于curl的信息。

以下是我数据的一部分

POST /auth HTTP/1.1
platform: android
X-Auth-Token: <censored>
Content-Type: application/json; charset=utf-8
Host: api.blabla.com
Accept-Encoding: gzip

正在发送的数据:

{"blabla_token": "sdsadsad", "blahblah_id": "23213", "locale": "us"}

现在,当我在dos shell中尝试cURL时,我尝试

curl --insecure -X POST https://api.blabla.com/auth --data '{"blabla_token": "sdsadsad", "blahblah_id": "23213", "locale": "us"}'

我从cURL得到的回应是:

{"code":401,"error":"blablaTokenRequired"}

即使我指定了令牌。因此,有两种可能的情况,因为令牌是正确的:

  1. 它与SSL有什么关系? (我使用--insecure,因为否则会收到SSL错误)
  2. 关于我命令的一些事情是不正确的,但我无法弄清楚是什么。
  3. 有人可以帮助我吗?我正在尽力而为,但没有成功

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解您的应用程序特定权利,但可能需要考虑一件事:

男子卷曲说:

-d, --data <data>
             (HTTP)  Sends the specified data in a POST request to the HTTP    server, in the same way that a browser does when
          a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data  to  the
          server using the content-type application/x-www-form-urlencoded.  Compare to -F, --form.

          -d,  --data  is the same as --data-ascii. --data-raw is almost the same but does not have a special interpreta‐
          tion of the @ character. To post data purely binary, you should instead use the --data-binary option.  To  URL-
          encode the value of a form field you may use --data-urlencode.

我无法在您的示例中看到将数据作为HTML表单输入发送的必要性,可能您的应用程序期望只是&#34; raw&#34; POST正文然后你必须尝试这个:

curl --insecure -X POST https://api.blabla.com/auth --data--binary '{"blabla_token": "sdsadsad", "blahblah_id": "23213", "locale": "us"}'

PS并且肯定这是错误不是关于使用--insecure而只是要求curl忽略ssl验证

答案 1 :(得分:0)

你忘了标题并启用压缩编码(gzip),但是,我相信你不能强迫curl只使用curl命令行来支持gzip编码,你将不得不使用libcurl,这会让请求说出来“接受编码:gzip,deflate”在大多数系统上,使用--compressed ..如果您不接受,请使用libcurl重写它(如果您愿意,可以通过CURLOPT_ENCODING强制它只说“gzip”)

curl -X POST https://api.blabla.com/auth --data '{"blabla_token": "sdsadsad", "blahblah_id": "23213", "locale": "us"}' --header 'platform: android' --header 'X-Auth-Token: <censored>' --header 'Content-Type: application/json; charset=utf-8' --header 'Host: api.blabla.com' --compressed

另一个问题:在某些系统上,会有一个默认的useragent标头(比如debian 6),而在某些系统上,curl没有默认的useragent(比如debian 8)..你可能想用--​​user-代理人''太