一尘不染

php curl:如何完全像Web浏览器一样模拟get请求?

php

有一些网站,当我在浏览器上打开特定的ajax请求时,会得到结果页面,但是当我尝试使用curl加载它们时,我从服务器收到错误消息。

我如何正确模拟对将模拟浏览器的服务器的get请求?

那就是我在做什么:

$url="https://new.aol.com/productsweb/subflows/ScreenNameFlow/AjaxSNAction.do?s=username&f=firstname&l=lastname";
ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
print $result;

阅读 705

收藏
2020-05-26

共1个答案

一尘不染

您确定curl模块使用ini_set(’user_agent’,…)吗?在http://docs.php.net/function.curl-
setopt中描述了CURLOPT_USERAGENT选项。
服务器还会测试cookie吗?您可以使用CURLOPT_COOKIE,CURLOPT_COOKIEFILE和/或CURLOPT_COOKIEJAR处理。

编辑:由于请求使用https,因此在验证证书时也可能出错,请参见CURLOPT_SSL_VERIFYPEER。

$url="https://new.aol.com/productsweb/subflows/ScreenNameFlow/AjaxSNAction.do?s=username&f=firstname&l=lastname";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
var_dump($result);
2020-05-26