Http curl在重定向后对所有请求使用POST

Http curl在重定向后对所有请求使用POST,http,redirect,curl,Http,Redirect,Curl,根据文档和一些类似的问题,所以curl应该使用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: c

根据文档和一些类似的问题,所以curl应该使用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
curl-kvv-b/tmp/tmp.BEo6w3GKDq-c/tmp/tmp.BEo6w3GKDq-X POST-H“Accept:application/json”-Lhttps://localhost/api/v1/resource
>POST/api/v1/resource HTTP/1.1
>用户代理:curl/7.29.0
>主机:本地主机
>Cookie:JSESSIONIDSSO=AB59F2FD09D38EDBAACB726CF212EA2E;JSESSIONID=743FD68B520840094B6D283A81CF3CFA
>接受:application/json
> 
找到POST/api/v1/resource HTTP/1.1
>用户代理:curl/7.29.0
>主机:testserver.int
>Cookie:JSESSIONID=1tcxpkul4qyqh1hycpf9insei9
>接受:application/json
我希望第二个请求实际使用GET而不是POST

说:

当curl遵循重定向并且请求不是普通GET时(例如 例如POST或PUT),它将使用GET if执行以下请求 HTTP响应为301、302或303。如果响应代码是任意的 其他3xx代码,curl将使用相同的 未修改的方法

您可以告诉curl不要将non-GET请求方法更改为GET 使用专用选项进行30倍响应后: --邮局301、-302和-303

不幸的是,这不是我所看到的,也没有--get30x的选项

所以我的问题是-如何让curl跟随重定向响应(301/302/303),并按照文档中的说明将GET请求发送到该位置


我已经用curl/7.29.0和curl/7.50.3对其进行了测试。

问题:您告诉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.
修复:从命令行中删除-X POST。改为使用-d“”发送一个空post,该post将在重定向后根据正确的方法进行相应调整


更多:在我的博客帖子中解释和咆哮。

我喜欢你的文章,但问题是什么?我已经更新了。。。文章结尾有一个问题:)很抱歉没有在开头说得更清楚。银行,这是有效的。提供一个空的正文而不是说-X POST似乎有点违反直觉,但实际上我错过了手册页的这一部分。因此,如果我使用
PUT
PATCH
而不是
POST
,我就倒霉了。当使用像@VasiliyFaronov提到的PUT或PATCH这样的其他方法时,有什么解决方案或解决办法吗?我正在围绕curl编写一个库,不知道如何处理这些。