1

次の設定があります。

$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_TIMEOUT, 30);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($handle);

しかし、現在まったく応答していないサーバーにリクエストが送信されると、curl は 1 秒で応答を返します。CURLOPT_CONNECTTIMEOUT を 30 に設定しているため、なぜそれが起こっているのかわかりません。これは、カールタイヤがサーバーに 30 秒接続することを意味するはずです。curl で 30 秒間接続を試行する必要があるのですが、それは CURLOPT_CONNECTTIMEOUT が行うべきことではないですか、それとも何らかの誤解がありますか?

print_r(curl_getinfo($handle), true) が返すものは次のとおりです。

(
    [url] => http://server.url
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 1.045
    [namelookup_time] => 0.016
    [connect_time] => 0
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [redirect_url] => 
)
4

1 に答える 1

1

私の意見では、これは、リモート サイトによって閉じられた (中止された) 接続があったことを意味します。サーバーが接続を拒否したため、何も待つ必要はありません。ところで: connection_timeout は、curl がリモート ホストへの到達を試みるのを停止するまでの待機時間を指定する設定です。– Mo.sch 13時間前

于 2013-01-19T11:12:59.410 に答える