根据文档和一些类似的问题,SOcurl 应该遵循使用 GET 方法的重定向,除非将 --post30x 指定为参数。但这是我测试的结果
curl -kvv -b /tmp/tmp.BEo6w3GKDq -c /tmp/tmp.BEo6w3GKDq -X POST -H "Accept: application/json" -L https://localhost/api/v1/resource
> POST /api/v1/resource HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Cookie: JSESSIONIDSSO=AB59F2FD09D38EDBAACB726CF212EA2E; JSESSIONID=743FD68B520840094B6D283A81CF3CFA
> Accept: application/json
>
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< Strict-Transport-Security: max-age=15768000; includeSubDomains
< Cache-control: no-cache, no-store
< Pragma: no-cache
< Location: https://testserver.int/api/v1/resource
< Content-Length: 0
< Date: Fri, 27 Jan 2017 08:41:05 GMT
<
> POST /api/v1/resource HTTP/1.1
> User-Agent: curl/7.29.0
> Host: testserver.int
> Cookie: JSESSIONID=1tcxpkul4qyqh1hycpf9insei9
> Accept: application/json
我希望第二个请求实际上使用 GET 而不是 POST。
卷曲的手册页 https://curl.haxx.se/docs/manpage.html#-L says:
当curl遵循重定向并且请求不是普通的GET时(例如
例如 POST 或 PUT),如果满足以下条件,它将使用 GET 执行以下请求:
HTTP 响应为 301、302 或 303。如果响应代码为任意
其他 3xx 代码,curl 将使用相同的代码重新发送以下请求
未修改的方法。
您可以告诉curl不要将非GET请求方法更改为GET
使用专用选项进行 30 倍响应后:
--post301、--post302 和 --post303。
不幸的是,这不是我所看到的,并且没有 --get30x 的选项。
所以我的问题是 - 如何使 curl 遵循重定向响应 (301/302/303),并向文档中写入的位置发出 GET 请求?
我已经用curl/7.29.0 和curl/7.50.3 对其进行了测试。
Problem:您告诉curl 通过使用-X POST 来做到这一点。正如 -X 的手册页部分所解释的:
The method string you set with -X, --request will be used for all requests, which
if you for example use -L, --location may cause unintended side-effects when curl
doesn't change request method according to the HTTP 30x response codes - and
similar.
Fix:从命令行中删除 -X POST。使用 -d "" 来发送一个空帖子,该帖子将在重定向后相应调整为正确的方法。
More:我的博客文章中的解释和咆哮不必要地使用curl -X https://daniel.haxx.se/blog/2015/09/11/unnecessary-use-of-curl-x/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)