2

ブログのソースコードを取得しようとしています。

PHP から試すか、コマンド ラインから試すかは問題ではありません。両方でタイムアウト。も試しget_file_contents()ましたが同じ問題

問題

このコマンドを試すと:

curl http://blogg.se -m 5 --verbose

私はこれを得る:

* About to connect() to blogg.se port 80 (#0)
*   Trying 82.96.60.8... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: blogg.se
> Accept: */*
>
* Operation timed out after 5001 milliseconds with 0 bytes received
* Closing connection #0
curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received

しかし、別のURLで試してみると:

curl http://ip.nu -m 5 --verbose

それは完全に機能しています。

禁止されるかもしれないと思っていましたが、プロキシでcurlを使用してみましたが、それでもタイムアウトします。

問題なく blogg.se に ping を実行できます。

また、php-script のユーザー エージェントも変更しています。

これは私のPHPです

$url = "http://blogg.se/";

$curl = curl_init(); 

$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$header[] = "Cache-Control: max-age=0"; 
$header[] = "Connection: keep-alive"; 
$header[] = "Keep-Alive: 300"; 
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
$header[] = "Accept-Language: en-us,en;q=0.5"; 
$header[] = "Pragma: ";

curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); 
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl, CURLOPT_MAXREDIRS,50);
curl_setopt($curl, CURLOPT_TIMEOUT, 10); 
$info = curl_getinfo($ch);

$html = curl_exec($curl);
if (!$html) 
{
    echo "cURL error number:" .curl_errno($curl);
    echo "cURL error:" . curl_error($curl);
    exit;
}

curl_close($curl);

echo $html;

このサーバーでは、nginx、php-fpm、およびワニスを使用してubuntuを実行しています

PHP バージョン 5.3.10-1ubuntu3.5 - cURL バージョン 7.22.0

バージョンを除いて、ほぼ同じ構成でAmazonにあるマイクロインスタンスで動作しています(上記の両方のURL)。

PHP バージョン 5.3.6-13ubuntu3.9 - cURL バージョン 7.21.6

同じphpスクリプトを使用して、windows/apacheのlocalhostからも機能します。


cookiejar と cookiefile を試しましたが、応答がないため、Cookie も取得できません。CURLOPT_SSL_VERIFYPEER を false に設定してみました。

他に試せることはありますか?

また、新しいサーバーに ping を送信できないことにも気付きましたが、Amazon のサーバーには ping を送信できます。

そのため、ufw ファイアウォールを無効にすると、ping で応答が返ってきましたが、それでも curl は機能しませんでした。

4

1 に答える 1

3

要求されたタイムアウト期間内にリモート HTTP サーバーが応答を返さないため、タイムアウトが発生します。それは本当に簡単です。エラーメッセージで示されているように、実際には 5 秒以内に 1 バイトも送信しません。

ping はサイトの Web サーバーからの HTTP 応答とは大きく異なる ICMP メッセージであるため、ping を実行できるかどうかはまったく関係ありません。

さて、もちろん、あなたが尋ねる質問は、なぜサーバーがあなたの要求に応答しないのかということです。それは、もっと知らなければ簡単にはわかりません. 以前の不正行為のためにサーバーがあなたを無視するのと同じくらい簡単かもしれません.単に遅いか、他のいくつかの理由の1つである可能性があります...

于 2013-03-07T22:53:50.543 に答える