0

markafoni.com の html データを CURL で取得しようとすると、返されます。

<script>
document.cookie = 'NSId=2;expires=Sun, 17-Jan-2038 01:00:00 GMT';
location.reload(true);
</script><noscript>%90'a varan indirim Markafoni'de</noscript>

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_COOKIESESSION,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt($ch, CURLOPT_REFERER, 'http://www.markafoni.com/');
curl_setopt($ch, CURLOPT_URL, 'https://www.markafoni.com/');

どうすればこの問題を解決できますか?

4

1 に答える 1

0

問題は、かなり特異な Cookie を設定するためのサーバーの手法です。実際には、あなたがやっているようなスクリーンスクレイピングを防ぐことを意図しているかもしれませんが、他の理由があるかもしれません.

サーバーには明らかに 2 つの異なる応答があります。

  1. Cookie が設定されていない場合はNSId、Javascript を送信して Cookie を設定し、それ以外は何も送信しません。
  2. NSIdCookie が設定されている場合は、ページ コンテンツを送信します。

次のコードで行うように、cURL は明らかにサーバーから Cookie を受信および設定できます。

curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

ただし、これは、サーバーが通常の方法で、つまりCookieHTTP ヘッダーを使用して Cookie を設定していることを前提としています。Javascript を使っているので (非常に独特です!)、cURL はそれを理解できません。

CURLOPT_COOKIE次のオプションを使用して、Cookie を自分で設定する必要があります。

curl_setopt($ch, CURLOPT_COOKIE, 'NSId=2');

このCURLOPT_COOKIEオプションは、cURL によって送信される Cookie 文字列を設定します。

于 2013-07-11T11:58:57.677 に答える