Php cURL返回302,而浏览器返回200

Php cURL返回302,而浏览器返回200,php,curl,http-status-code-302,Php,Curl,Http Status Code 302,我有一个脚本,它使用大量cURL登录到一个站点并提交一系列表单,但是最近由于cURL请求返回302并重定向到块/端点页面,该脚本已经停止工作。如果我在浏览器上执行相同的操作,我认为没有重定向,只有200 OK 我的cURL使用的是登录过程返回的cookie,因此我认为会话不会被删除 我最初认为,由于重定向位置的原因,CSRF令牌(某种类型)丢失了,并且流程中的后续表单(使用浏览器)包含一个隐藏的CSRF令牌字段,但URL不需要发布数据 旋度和响应如下所示: curl_setopt($ch, CU

我有一个脚本,它使用大量cURL登录到一个站点并提交一系列表单,但是最近由于cURL请求返回302并重定向到块/端点页面,该脚本已经停止工作。如果我在浏览器上执行相同的操作,我认为没有重定向,只有200 OK

我的cURL使用的是登录过程返回的cookie,因此我认为会话不会被删除

我最初认为,由于重定向位置的原因,CSRF令牌(某种类型)丢失了,并且流程中的后续表单(使用浏览器)包含一个隐藏的CSRF令牌字段,但URL不需要发布数据

旋度和响应如下所示:

curl_setopt($ch, CURLOPT_URL, 'https://*******.********.co.uk/Dispatcher?menuid=pos_home'); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_HEADER, 0);
$content = curl_exec ($ch);
echo "CURL INFO : <BR/><pre>" ;
print_r(curl_getinfo($ch));
)


如果有人知道服务器为什么或如何对浏览器请求的cURL做出不同的响应,我将非常感激-谢谢。您需要遵循重定向:

不遵循重定向的其他原因:

4.14重定向可在浏览器中工作,但不能使用curl

curl支持HTTP重定向(请参阅第3.8项)。浏览器通常支持至少两种其他方式来执行curl不支持的重定向:

元标记。您可以编写一个HTML标记,使浏览器在一段时间后重定向到另一个给定的URL

Javascript。您可以编写嵌入HTML页面的Javascript程序,将浏览器重定向到另一个给定URL

没有办法让curl遵循这些重定向。您必须手动确定页面设置的作用,或者编写一个脚本来解析结果并获取新的URL


来源:

可能服务器开始检查
用户代理:
引用者:
HTTP头

尝试嗅探浏览器发送的请求(现代浏览器的开发工具会告诉您请求的外观),并更新
cUrl
代码以匹配浏览器发送的请求

也要考虑你在问题的评论中所提出的建议(询问网站所有者或只是自动停止他们的站点)。

< P> > -L或-位置选项跟随重定向。


curl-L google.com

联系该网站,询问他们需要什么才能让您的脚本正常工作。“如果有人知道为什么或者如何让服务器对浏览器请求的curl做出不同的响应”——有很多可能的原因,从用户代理这类琐碎的事情开始,更详细地说明将您的请求分类为非来自“浏览器”的原因。如果该网站似乎对你正在尝试做的事情采取了措施,那么这可能是他们不希望你这么做的迹象……谢谢@axaic-当我早些时候醒来并在看到你的回应之前尝试了这些设置时,我也是这么想的。不幸的是没有运气。网站所有者知道,我们已经使用这个爬虫程序很多年了,并且对此视而不见,每天允许我们合理的请求数量(没有超过)-网站所有权发生了变化,因此policy/heart.Curl默认情况下不遵循重定向,正如官方页面上指定的那样,这需要设置
CURLOPT_FOLLOWLOCATION
,如中所述。
Array
(
[url] => https://*******.********.co.uk/Dispatcher?menuid=pos_home
[content_type] => text/html
[http_code] => 302
[header_size] => 253
[request_size] => 332
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.142718
[namelookup_time] => 2.4E-5
[connect_time] => 2.4E-5
[pretransfer_time] => 9.0E-5
[size_upload] => 43
[size_download] => 327
[speed_download] => 2291
[speed_upload] => 301
[download_content_length] => -1
[upload_content_length] => 43
[starttransfer_time] => 0.142659
[redirect_time] => 0
[certinfo] => Array
    (
    )

[primary_ip] => nnn.nnn.nnn.nn
[primary_port] => 443
[local_ip] => nnn.nnn.nnn.nn
[local_port] => 53154
[redirect_url] => https://*******.********.co.uk/Dispatcher?menuid=badorMissingCSRFT
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);