为什么在 file_get_contents 工作时使用 cURL 会给我一个 403 forbidden 错误?

Why is using cURL giving me a 403 forbidden error when file_get_contents works?

这是我的 PHP 代码:

$ch = curl_init('http://www.iphonehacks.com/2016/08/jailbreak-iphone-ipad-ios-9-3-3-pangu-1-1.html'); 
curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($ch);
curl_close($ch);

echo $data;

上面的代码给我一个 403 错误,但是当我使用 file_get_contents 时,我可以回显整个网页。

$data = file_get_contents('http://www.iphonehacks.com/2016/08/jailbreak-iphone-ipad-ios-9-3-3-pangu-1-1.html');

echo $data;

谁能指出 cURL 方法有什么问题。我知道我可以使用 file_get_contents,但我有兴趣了解第一种情况出了什么问题,以便更好地理解 cURL。

您的 CURLOPT_USERAGENT 选项不正确。将其更改为:

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");

您不得在 CURLOPT_USERAGENT 选项上使用前缀 "User-Agent: "。该网站拒绝它,因为它收到以下请求 header:

User-Agent: User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

而不是:

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36