9

マルチカールを使用してリモートサイトからデータをフェッチしています。私のスクリプトは次のようなものです

foreach ($urls as $i => $url) {
            $ch[$i] = curl_init($url['url']);
            curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
            curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);
            curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
            curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}

応答として禁止されている403を返します。

提案やコメントを事前に感謝します。

4

5 に答える 5

15

ユーザー エージェント用に 2 行追加してみて、動作するかどうかを確認してください。一部のサーバーは、スクリプトからの要求を受け入れません。これは、ユーザー エージェントに依存します。

// line 1
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

foreach ($urls as $i => $url) {
    $ch[$i] = curl_init($url['url']);
    curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);

    // line 2
    curl_setopt($ch[$i], CURLOPT_USERAGENT, $agent);

    curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
    curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}
于 2012-05-24T13:08:56.390 に答える
2

接続しようとしているサイトの運営者に連絡し、リクエストが禁止されている理由を尋ねてください。

次に、停止するか (あなたがしていることを彼らが受け入れられないと判断した場合)、彼らの規則に準拠するように要求を変更することができます。

于 2012-05-24T13:09:54.550 に答える
1

Referer ヘッダーと User-Agent ヘッダーを設定してみてください。

... CURLOPT_SSL_VERIFYPEER を false に設定することは危険であり、本番環境では決して行うべきではありません。少なくともある種の is_dev チェックでその行をラップします。

そうすることで、SSL の目的を無効にし、攻撃者が SSL 証明書を確認せずに要求を傍受し、好きなものを返すことを可能にします。

于 2016-07-17T20:08:01.273 に答える