3

なぜこれが起こっているのか分かりました、私の答えをチェックしてください

これは、これが発生する唯一のドメインです。私は多数の URL で curl_multi を実行しています。これは 404 http_code http://www.breakingnews.comで返されます。

しかし、ブラウザでアクセスすると、200OK (ロードに時間がかかります) で、リダイレクトのようにも見えません。

何が起きているか知っている人はいますか?これは一般的な問題ですか

ここにvar_dumpがあります:

 ["info"]=> array(22) { ["url"]=> string(27) "http://www.breakingnews.com" ["content_type"]=> string(24) "text/html; charset=utf-8" ["http_code"]=> int(404) ["header_size"]=> int(337) ["request_size"]=> int(128) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(1.152229) ["namelookup_time"]=> float(0.001261) ["connect_time"]=> float(0.020121) ["pretransfer_time"]=> float(0.020179) ["size_upload"]=> float(0) ["size_download"]=> float(9755) ["speed_download"]=> float(8466) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(0) ["starttransfer_time"]=> float(1.133522) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["redirect_url"]=> string(0) "" } ["error"]=> string(0) ""

更新: これは実際には curl_setopt($ch, CURLOPT_NOBODY, true); の php バグのようです。 https://bugs.php.net/bug.php?id=39611

編集: バグではありません。

4

2 に答える 2

11

ここのコメントで答えを見つけましたhttp://w-shadow.com/blog/2007/08/02/how-to-check-if-page-exists-with-curl/comment-page-1/#comment -12186 CURLOPT_NOBODY を true に設定すると、CURL はリクエストに HEAD を使用しますが、一部のサーバー (forbes など) はこれを好まず、「Emply reply from server」を返します。修正するには、CURLOPT_HTTPGET を設定して GET 要求にリセットする必要もあります。

/* don’t download the page, just the header (much faster in this case) */
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true); //this is needed to fix the issue
于 2012-05-09T02:26:10.800 に答える
1

あなたのコードがどのように見えるかわかりませんが、これはうまくいきます

$url = "http://www.breakingnews.com";
$ch = curl_init ( $url );
curl_setopt ( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0" );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );

curl_exec ( $ch );
var_dump ( curl_getinfo ( $ch ) );
if (curl_errno ( $ch )) {
    print curl_error ( $ch );
} else {
    curl_close ( $ch );
}

出力

array
  'url' => string 'http://www.breakingnews.com' (length=27)
  'content_type' => string 'text/html; charset=utf-8' (length=24)
  'http_code' => int 200
  'header_size' => int 330
  'request_size' => int 154
  'filetime' => int -1
  'ssl_verify_result' => int 0
  'redirect_count' => int 0
  'total_time' => float 4.243
  'namelookup_time' => float 0.171
  'connect_time' => float 0.374
  'pretransfer_time' => float 0.374
  'size_upload' => float 0
  'size_download' => float 68638
  'speed_download' => float 16176
  'speed_upload' => float 0
  'download_content_length' => float -1
  'upload_content_length' => float 0
  'starttransfer_time' => float 3.681
  'redirect_time' => float 0
  'certinfo' => 
    array
      empty
  'redirect_url' => string '' (length=0)
于 2012-05-01T22:34:22.330 に答える