0

次のスクリプトがあります。

$curl = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_URL, 'http://4pda.ru/forum/index.php?act=idx');
curl_setopt($curl, CURLOPT_HEADER, true);

$headers = array();
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; 
$headers[] = 'Connection: Keep-Alive'; 
$headers[] = 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
$headers[] = 'Accept-Encoding: gzip, deflate';
$headers[] = 'Host: 4pda.ru';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0';


curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$cookie_path = "./cookies.txt";
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_path);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_path);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

$result = curl_exec($curl); 
var_dump(curl_getinfo($curl,CURLINFO_HEADER_OUT)); //problem one

curl_close($curl);
var_dump($result);

2 つの問題があります。まず、PHP Curl はヘッダーを設定しません。次のヘッダーのみを送信します。

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0
Host: 4pda.ru
Accept: */*

PHP がヘッダーを正しく設定していないことがわかります。2 つ目の問題は、サーバーが次のコンテンツを返すことです。

HTTP/1.1 403 Forbidden
Server: nginx
Date: Wed, 26 Jun 2013 14:26:18 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Keep-Alive: timeout=20

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

ただし、ページのhtmlを取得することを期待しています。

このスクリプトが私のホーム サーバー (Windows) と以前のサーバーで正常に動作することは驚くべきことです。私の問題は、新しいサーバーの構成が間違っていることが原因だと思います。しかし、私は間違っている可能性があります。

アドバイスをいただければ幸いです。よろしく、デニス。

アップデート。Ma Chuan に感謝します。最初の問題は解決しました。

4

1 に答える 1

2

そのセットヘッダー行で間違った変数名を使用していませんか?

curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);

読むべき

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
于 2013-06-26T15:58:05.173 に答える