【发布时间】:2020-02-26 22:06:05
【问题描述】:
我想使用 PHP cURL 获取特定网站的源代码。
用我的电脑上的浏览器访问这个网站没有任何问题。
但是当我想用我的 PHP 脚本访问这个网站时,网站会识别出这是一个自动请求并显示一条错误消息。
这是我的 PHP 脚本:
<?php
$url = "https://www.example.com";
$user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15";
$header = array('http' => array('user_agent' => $user_agent));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
?>
用户代理与我在浏览器中使用的相同。我正在使用带有 MAMP PRO 的本地服务器。这意味着我对浏览器访问和 PHP 脚本访问都使用相同的 IP 地址。
我已经用许多不同的标题和选项尝试了我的 PHP 脚本,但没有任何效果。
对于我想要访问网站的 Web 服务器,必须有任何东西使 PHP 脚本访问看起来与浏览器访问不同。但是什么?你有什么想法吗?
编辑
我发现它可以使用这个 cURL:
curl 'https://www.example.com/' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7'
如果我输入这个,例如终端,它显示了正确的源代码。
我将其转换为 PHP 脚本如下:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headers = array();
$headers[] = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3';
$headers[] = 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
不幸的是,这样它仍然显示错误消息。
这意味着,对于我想要访问网站的 Web 服务器,必须有任何东西使命令行访问看起来与浏览器访问不同。但它是什么?
【问题讨论】: