CURLを使用してページのコンテンツを取得しようとしています。フェッチを行っているページはhttpsで、フェッチしようとしているページもhttpsです。試行したすべての設定で「ホストを解決できませんでした」というエラーが表示されます。
$c=curl_init();
curl_setopt($c, CURLOPT_URL,$url);
//curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x");
curl_setopt ($c, CURLOPT_RETURNTRANSFER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYPEER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($c, CURLOPT_HEADER, FALSE);
$html=curl_exec($c);
if($html === false) {
echo curl_error($c);
}
else {
echo 'Operation completed without any errors';
}
curl_close($c);
何か案は?
おそらくDNSの問題ですか?
このコード に対してURLを試してください:
$_h = curl_init();
curl_setopt($_h, CURLOPT_HEADER, 1);
curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_h, CURLOPT_HTTPGET, 1);
curl_setopt($_h, CURLOPT_URL, 'YOUR_URL' );
curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 );
var_dump(curl_exec($_h));
var_dump(curl_getinfo($_h));
var_dump(curl_error($_h));
CURLがIPv6の使用を決定できることがわかりました。その場合、解決を試みますが、IPv6の回答(またはその結果)が得られず、タイムアウトします。
これをテストするには、コマンドラインスイッチ-4を試してください。
PHPでは、これを設定してこの行を構成できます。
curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
同じ問題がありました。 google.comを解決できませんでした。私が使用しているphp fpmのどこかにバグがありました。 php-fpmを再起動すると解決しました。
役に立つかもしれないメモ-私はラップトップのApacheでこの問題を抱えていました(起動後にwifiで接続します)、サーバーを再起動すると(接続後に)問題が修正されました。私の場合、これはApacheがオフラインで起動することと関係している可能性があり、おそらくDNS検索が失敗することに注意してください。
Ubuntuのglibcには、次のような効果がある現在のバグがあります。 https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/16747
これを解決するには、libcおよび関連するすべて(アップグレードされるパッケージ:libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev locales multiarch-support)を更新し、サーバーを再起動します。
上記すべてを試しても、まだ問題を解決できません。しかし、私の問題の新しい解決策を得ました。
リクエストを行うサーバーには、仮想ホストのエントリが必要です。
Sudo vim /etc/hosts
そして挿入
192.xxx.x.xx www.domain.com
サーバーからそれ自体にリクエストを行っている場合、仮想ホストを解決または識別するために、サーバーは上記のものを必要とします。そうしないと、サーバーはリクエスト元のホストを理解できません。