web-dev-qa-db-ja.com

CURLおよびHTTPS、「ホストを解決できません」

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);

何か案は?

35
swt83

おそらく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)); 
25
KB22

CURLがIPv6の使用を決定できることがわかりました。その場合、解決を試みますが、IPv6の回答(またはその結果)が得られず、タイムアウトします。

これをテストするには、コマンドラインスイッチ-4を試してください。

PHPでは、これを設定してこの行を構成できます。

curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
50
Staplerfahrer

同じ問題がありました。 google.comを解決できませんでした。私が使用しているphp fpmのどこかにバグがありました。 php-fpmを再起動すると解決しました。

28
TecBeast

役に立つかもしれないメモ-私はラップトップのApacheでこの問題を抱えていました(起動後にwifiで接続します)、サーバーを再起動すると(接続後に)問題が修正されました。私の場合、これはApacheがオフラインで起動することと関係している可能性があり、おそらくDNS検索が失敗することに注意してください。

5
Rick

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)を更新し、サーバーを再起動します。

2
LewisEmilyR

上記すべてを試しても、まだ問題を解決できません。しかし、私の問題の新しい解決策を得ました。

リクエストを行うサーバーには、仮想ホストのエントリが必要です。

Sudo vim /etc/hosts

そして挿入

192.xxx.x.xx www.domain.com

サーバーからそれ自体にリクエストを行っている場合、仮想ホストを解決または識別するために、サーバーは上記のものを必要とします。そうしないと、サーバーはリクエスト元のホストを理解できません。

1
Jigar7521