Webからデータを取得し、 cURLとSimple HTMLDomPHPクラスを使用してユーザーに表示しようとしています。
一部のページはクライアントの言語に応じてリダイレクトされます。私は関数を使用して、スクレイピングされる最終ページを決定しています。
ユーザーが見るようにそれを表示するために、私はこれを使用しています:
$useragent = $_SERVER['HTTP_USER_AGENT'];
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
現在、私の現在のユーザーのほとんどはスペイン語を話します。そのため、受け入れられる言語を一時的に制限しているため、ターゲットページに言語リダイレクトがある場合は、最初にスペイン語または英語が表示されます。
$header[] = "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3";
ただし、私のサーバーはオランダにあり、一部のページにはIPベースのリダイレクタがあるため、言語パラメータを無視して、ページが/nl/ディレクトリにリダイレクトされることがあります。
これは、たとえば、www.econsultancy.comWebサイトで発生します。
cURLリクエストでクライアントのIPアドレスを使用して、この種のリダイレクトを回避することは可能ですか?
また、クライアントのブラウザ言語設定を使用して、Accept-Languageパラメータを動的にすることは可能ですか?
関数スクリプト全体は次のとおりです。
<?
function redirector($originalurl) {
$ch = curl_init();
$useragent = $_SERVER['HTTP_USER_AGENT'];
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3";
$header[] = "Pragma: ";
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $originalurl);
$out = curl_exec($ch);
$out = str_replace("\r", "", $out);
$headers_end = strpos($out, "\n\n");
if( $headers_end !== false ) {
$out = substr($out, 0, $headers_end);
}
$headers = explode("\n", $out);
foreach($headers as $header) {
if( substr($header, 0, 10) == "Location: " ) {
$target = substr($header, 10);
$targeturl = $target;
}
}
return $targeturl;
}
?>
前もって感謝します!