在 curl 中提交内容类型标头的正确方法是什么?

Dav*_*ave 2 curl content-type-association headers

我正在使用带有 bash shell 的 Mac 10.9.5。我正在尝试通过 curl 提交请求,但是当我尝试设置内容类型标头时,我不断收到错误消息。下面我试试

davea$ curl -v -o -H "Content-Type: application/json" -X POST -d '{"username”:”username”,”password”:”password”}’ http://localhost:8080/myproject/login
Run Code Online (Sandbox Code Playgroud)

但是 curl 会吐出“curl: (6) 无法解析主机 'Content-Type'”错误。下面是完整的输出:

* getaddrinfo(3) failed for Content-Type:80
* Couldn't resolve host 'Content-Type'
* Closing connection 0
curl: (6) Couldn't resolve host 'Content-Type'
*   Trying ::1...
* Connected to localhost (::1) port 8080 (#1)
> POST /myproject/login HTTP/1.1
> User-Agent: curl/7.40.0
> Host: localhost:8080
> Accept: */*
> Content-Length: 40
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 40 out of 40 bytes
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Set-Cookie: JSESSIONID=B980765C84EA5759F743D1AAE8E189D0; Path=/myproject/; HttpOnly
< Location: http://localhost:8080/myproject/login?error
< Content-Length: 0
< Date: Mon, 06 Jul 2015 16:03:37 GMT
< 
* Connection #1 to host localhost left intact
Run Code Online (Sandbox Code Playgroud)

通过 curl 提交内容类型标头的正确方法是什么?

ber*_*ieb 5

通过 提交内容类型标头的正确方法是什么curl

使用-H参数,如您所指定:

-H "Content-Type: application/json"
Run Code Online (Sandbox Code Playgroud)

另一方面,您指定了-o(output to file) 选项,但未指定文件:

如果您需要 HTTP POST 或 PUT 请求的进度表,则需要使用 shell 重定向 (>)、-o [file] 或类似方法将响应输出重定向到文件。

(来自man curl)

所以命令变成:

$ curl -o output.txt -H "Content-Type: application/json" -X POST -d '{"username":"username","password":"password"}' http://localhost:8080/myproject/login
Run Code Online (Sandbox Code Playgroud)

(注意,我还替换了上述命令中的智能引号,因为它们已进入您的问题)

output.txt按照您的指定提交标头和输出(到)。-o output.txt如果不需要,也可以不使用该参数。虽然man curl页面似乎没有指定它,但在测试-v中不能与-o.