gpt4 book ai didi

http - 浏览器给我 http 状态代码 200,而 curl 给我状态代码 301

转载 作者:可可西里 更新时间:2023-11-01 17:17:07 28 4
gpt4 key购买 nike

当我在网站上填写表格并使用 Chrome 开发工具对其进行检查时,我得到以下信息:

Response Headers:
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK

Request Headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 53
Content-Type: application/x-www-form-urlencoded
DNT: 1
Host: www.32x8.com
Origin: http://www.32x8.com

Form Data:
in0: 0
calctype: pos
in1: 1
in2: 1
in3: 0
drawtype: htmlcss

这在浏览器中工作得很好,但是当我发出以下 curl 请求时:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "in0=1&calctype=pos&in1=1&in2=1&in3=0&drawtype=htmlcss" -v http://www.32x8.com/circuits2

我得到这个输出:

...
* Connected to www.32x8.com (2605:de00:1:1:4a:3c:0:42) port 80 (#0)
> POST /circuits2 HTTP/1.1
> Host: www.32x8.com

< Server: nginx
< Status: 301 Moved Permanently
< Location: http://www.32x8.com/var2.html
...

我收到 301 响应。所以我尝试将 -L 标志添加到命令中以遵循任何重定向

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "in0=1&calctype=pos&in1=1&in2=1&in3=0&drawtype=htmlcss" -L -v http://www.32x8.com/circuits2

但这只是让我得到这个输出

...
> POST /circuits2 HTTP/1.1
> Host: www.32x8.com
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 53
>
* upload completely sent off: 53 out of 53 bytes
< HTTP/1.1 301 Moved Permanently
< Server: nginx
< Date: Wed, 01 May 2019 19:54:49 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< Status: 301 Moved Permanently
...
* Switch from POST to GET
...
> POST /var2.html HTTP/1.1
> Host: www.32x8.com
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 405 Not Allowed
< Server: nginx
< Date: Wed, 01 May 2019 19:54:49 GMT
< Content-Type: text/html
< Content-Length: 173
< Connection: keep-alive
...

我得到一个 405。我做错了什么?

最佳答案

您实际上并没有做错任何事情,但您遇到了多年前的 HTTP 怪癖,并且出于兼容性原因由 cURL 维护。

您正在向您的服务器发出 POST 请求,该服务器正在响应 301 重定向消息。当您要求 cURL 遵循重定向时,它会这样做,但会将 POST 更改为 GET。这是从过去几代浏览器继承的行为(我不明白这里的逻辑)。然后,您的服务器将 GET 请求拒绝为不允许。

您有两种可能的解决方案:301 消息表示永久重定向,因此只需使用新地址(无论如何您都应该这样做)

或者,在您自己的代码中检测 301 消息并自行遵循重定向,以便您可以发出正确的 POST 命令。这可能意味着您需要一个 shell 脚本而不仅仅是 cURL。

关于http - 浏览器给我 http 状态代码 200,而 curl 给我状态代码 301,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942107/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com