0

URL の例: https://www.tescogoldexchange.com/gold-calculator.aspx?carat=9&weight=1&ref=miniQuote

cURL を使用して HTTPS ページのコンテンツを取得しようとしています。

問題は、ドキュメントを取得できず、その理由がわからないことです。

    function download_page($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");

    return curl_exec($ch);
}
4

3 に答える 3

1

この男が直面しているのと同じ問題に直面している可能性があります。そして、彼はそれを修正したようです。問題はおそらく、SSL 証明書に関するネゴシエーションと、サーバーが送信している証明書が信頼できることを cURL がどのように伝えるかです。

于 2012-09-10T21:23:22.223 に答える
1

エラーを確認します。

$result = curl_exec($ch);
if (!$result) {
   die(curl_error($ch));
}

おそらく、curl には「有効な」CA の内部リストが付属していないため、リモート サイトの証明書が有効であることを確認できないという事実に悩まされている可能性があります。証明書の検証を無効にするか、CA のリストを自分でインストールする必要があります。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

ps は、リモート リソースでの操作が成功したとは決して想定しません。常にエラー状態をチェックし、利用可能なエラー メッセージを出力します。暗闇の中でぶらぶらするよりも、ライトをつけておくことで、多くの頭を悩ませることを避けることができます.

于 2012-09-10T21:30:48.120 に答える
0

あなたが提供したコードは、実際には変更なしで問題なく動作します。RolfVandeKrol が述べたように、SSL ネゴシエーションの問題が発生している可能性があります。その考えを修正するには、次のコマンドで SSL ピア検証をオフにします。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

実際に何が起こっているかを確認するには、変更する前に、 を使用curl_getinfo($ch)して、返されたすべてのヘッダーを表示できます。これにより、適切な診断のためにスクリプトが受け取っている応答の種類がわかります。

さらに、 でcurlハンドルを適切に閉じるように関数を変更することもできますcurl_close($ch);。の代わりにreturn curl_exec($ch);、次を使用してみてください。

    ...
    $contents = curl_exec($ch);
    curl_close($ch);
    return $contents;
}
于 2012-09-10T21:30:29.773 に答える