3

curl スクリプトを使用してリンクに移動し、そのコンテンツを取得してさらに操作しています。以下はリンクとcurlスクリプトです:

<?php 
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&amp;templateName=detail.htm&amp;requestingHandler=WebNSORDetailHandler&amp;ID=368343543';

//curl script to get content of given url

$ch = curl_init();

// set the target url

curl_setopt($ch, CURLOPT_URL,$url);

// request as if Firefox

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

しかし、ウェブサイトはスクリプトを介してそれを除外していませんが、結果としてユーザーに例外を与えていますが、通常ブラウザにURLを貼り付けると、ページは完全に正常に開きます.

私がここで間違っていることを助けてください。

感謝と敬意

4

4 に答える 4

6

次のプログラム/スクリプトを実行したところ、ページが正しくダウンロードされました。これはおそらく、スクリプトを実行しているサーバーが「criminaljustice.state.ny.us」のサーバーに到達できないことを意味します。これは、サーバーの構成が間違っているか、サーバーが明示的にブロックしているためです。これは、積極的なスクリーンスクレイピングの一般的な結果です.

<?php
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;

追加のトラブルシューティングのヒント -- PHP スクリプトを実行しているマシンにシェル アクセスできる場合は、次のコマンドを実行します。

curl -I 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543'

これにより、応答ヘッダーが出力されます。これには、要求が失敗した理由についての手がかりが含まれている場合があります。

于 2009-05-02T16:19:37.270 に答える
2

followlocationオプションが設定されていないという同じ問題がありました。curl はデフォルトで true に設定すると思っていましたが、違うと思います!? 設定すると、サイト全体が問題なく表示されます

于 2012-02-23T22:31:57.193 に答える
2

ユーザーエージェントについては、 CURLOPT_USERAGENT 定数を使用したいと思います

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
于 2009-05-02T05:30:34.397 に答える
1

ユーザーエージェントはそのような配列にあることを意図していますか? 私はそれがそのように行われたのを見たことがありません。

単純な文字列を使用してみてください。

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15'); 
于 2009-05-02T04:52:08.980 に答える