スクレイピング用のコンテンツを作成したパートナーがいます。
ブラウザでページにアクセスできますが、file_get_contents
を使用しようとすると、403 forbidden
が表示されます。
stream_context_create
を使用してみましたが、効果がありません。何が必要かわからないことが原因である可能性があります。
1)データをこする方法はありますか?
2)いいえの場合、およびパートナーがアクセスを許可するようにサーバーを構成することを許可されていない場合、どうすればよいですか?
私が使用しようとしたコード:
$opts = array(
'http'=>array(
'user_agent' => 'My company name',
'method'=>"GET",
'header'=> implode("\r\n", array(
'Content-type: text/plain;'
))
)
);
$context = stream_context_create($opts);
//Get header content
$_header = file_get_contents($partner_url,false, $context);
これはスクリプトの問題ではなく、パートナーのWebサーバーセキュリティの機能です。
何があなたをブロックしているのか正確に言うのは難しいです、おそらくそれはスクレイピングに対する一種のブロックです。パートナーが自分のWebサーバーのセットアップにアクセスできる場合は、ピンポイントで見つけることができます。
あなたができることは、それが標準のウェブブラウザを模倣するようにユーザーエージェントヘッダーを設定することによって「偽のウェブブラウザ」にすることです。
これを行うにはcURLをお勧めします。これを行うための適切なドキュメントを簡単に見つけることができます。
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "example.com");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
//最初にユーザーエージェントを設定
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');
私は2つのことを頭に入れています。スペースなどの特殊文字を使用してURIを開く場合は、urlencode()を使用してURIをエンコードする必要があります。fopenラッパーが持っている場合、この関数でファイル名としてURLを使用できます。有効になっています。