8

私はこのサイトで20以上の関連する質問を読み、Googleで検索しましたが、役に立ちませんでした。私はPHPを初めて使用し、PHP SimpleHTMLDOMパーサーを使用してURLをフェッチしています。このスクリプトはローカルのテストページでは機能しますが、スクリプトが必要なURLでは機能しません。

PHP Simple DOMパーサーライブラリに付属しているサンプルファイルに従って、このために作成したコードを次に示します。

<?php

include('simple_html_dom.php');

$html = file_get_html('http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL');

foreach($html->find('li.name ul#generalListing') as $e)
echo $e->plaintext;  

?>

そして、これは私が受け取るエラーメッセージです:

Warning: file_get_contents(http://www.farmersagent.com/Results.aspx?isa=1&amp;name=A&amp;csz=AL) [function.file-get-contents]: failed to open stream: Redirection limit reached, aborting in /home/content/html/website.in/test/simple_html_dom.php on line 70

それを機能させるために何をすべきかを教えてください。私は新しいので、簡単な方法を提案してください。このサイトで他の質問とその回答を読みながら、cURLメソッドを使用してハンドルを作成しようとしましたが、機能しませんでした。私が試したcURLメソッドは、「Resources」または「Objects」を返し続けます。$ html-> find()を正しく機能させるためにそれをSimpleHTMLDOMパーサーに渡す方法がわかりません。

助けてください!ありがとう!

4

5 に答える 5

11

今日も同様の問題がありました。CURL を使用していましたが、エラーが返されませんでした。file_get_contents() でテストしたところ...

ストリームを開くことができませんでした: リダイレクトの制限に達しました。中止します

いくつかの検索を行い、私のケースで機能するこの機能で終了しました...

function getPage ($url) {


$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
$timeout= 120;
$dir            = dirname(__FILE__);
$cookie_file    = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_ENCODING, "" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_MAXREDIRS, 10 );
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
$content = curl_exec($ch);
if(curl_errno($ch))
{
    echo 'error:' . curl_error($ch);
}
else
{
    return $content;        
}
    curl_close($ch);

}

Web サイトは、有効なユーザー エージェントとCookieをチェックしていました。

Cookieの問題が原因でした!:) 平和!

于 2015-07-29T15:00:59.580 に答える
4

以下で解決:

<?php
$context = stream_context_create(
    array(
        'http' => array(
            'max_redirects' => 101
        )
    )
);
$content = file_get_contents('http://example.org/', false, $context);
?>

中間にプロキシがあるかどうかを通知することもできます。

$aContext = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true));
$cxContext = stream_context_create($aContext);

詳細: https://cweiske.de/tagebuch/php-redirection-limit-reached.htm (@jqpATs2w に感謝)

于 2016-08-29T21:54:54.327 に答える
1

cURL を使用する場合、CURLOPT_RETURNTRANSFER オプションを true に設定して、次のcurl_execように呼び出してリクエストの本文を返す必要があります。

$url = 'http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// you may set this options if you need to follow redirects. Though I didn't get any in your case
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$content = curl_exec($curl);
curl_close($curl);

$html = str_get_html($content);
于 2012-08-28T17:13:53.543 に答える