php cURL Operation timed out après 120308 millisecondes avec X de -1 octets reçus
Je suis en train de vivre cette erreur (voir le Titre) de temps à autre dans mon grattage script.
X est le nombre entier d'octets > 0, le nombre réel d'octets que le serveur a envoyé en réponse. J'ai réglé ce problème avec Charles proxy et voici ce que je vois
Comme vous pouvez le voir il n'est pas Content-Length: en-tête de réponse, et la procuration, attend toujours pour les données (et donc la boucle attendu 2 minutes et a donné jusqu')
La boucle de code d'erreur est de 28.
Ci-dessous quelques informations de débogage à partir détaillé curl sortie avec var_export ed curl_getinfo() de la demande:
* About to connect() to proxy 127.0.0.1 port 8888 (#584)
* Trying 127.0.0.1...
* Adding handle: conn: 0x2f14d58
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 584 (0x2f14d58) send_pipe: 1, recv_pipe: 0
* Connected to 127.0.0.1 (127.0.0.1) port 8888 (#584)
> GET http://bakersfield.craigslist.org/sof/3834062623.html HTTP/1.0
User-Agent: Firefox (WindowsXP) Ц Mozilla/5.1 (Windows; U; Windows NT 5.1; en-GB
; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Host: bakersfield.craigslist.org
Accept: */*
Referer: http://bakersfield.craigslist.org/sof/3834062623.html
Proxy-Connection: Keep-Alive
< HTTP/1.1 200 OK
< Cache-Control: max-age=300, public
< Last-Modified: Thu, 11 Jul 2013 21:50:17 GMT
< Date: Thu, 11 Jul 2013 21:50:17 GMT
< Vary: Accept-Encoding
< Content-Type: text/html; charset=iso-8859-1
< X-MCP-Cache-Control: max-age=2592000, public
< X-Frame-Options: SAMEORIGIN
* Server Apache is not blacklisted
< Server: Apache
< Expires: Thu, 11 Jul 2013 21:55:17 GMT
* HTTP/1.1 proxy connection set close!
< Proxy-Connection: Close
<
* Operation timed out after 120308 milliseconds with 4636 out of -1 bytes receiv
ed
* Closing connection 584
Curl error: 28 Operation timed out after 120308 milliseconds with 4636 out of -1
bytes received http://bakersfield.craigslist.org/sof/3834062623.htmlarray (
'url' => 'http://bakersfield.craigslist.org/sof/3834062623.html',
'content_type' => 'text/html; charset=iso-8859-1',
'http_code' => 200,
'header_size' => 362,
'request_size' => 337,
'filetime' => -1,
'ssl_verify_result' => 0,
'redirect_count' => 0,
'total_time' => 120.308,
'namelookup_time' => 0,
'connect_time' => 0,
'pretransfer_time' => 0,
'size_upload' => 0,
'size_download' => 4636,
'speed_download' => 38,
'speed_upload' => 0,
'download_content_length' => -1,
'upload_content_length' => 0,
'starttransfer_time' => 2.293,
'redirect_time' => 0,
'certinfo' =>
array (
),
'primary_ip' => '127.0.0.1',
'primary_port' => 8888,
'local_ip' => '127.0.0.1',
'local_port' => 63024,
'redirect_url' => '',
)
Puis-je faire quelque chose comme l'ajout d'une boucle pour éviter ces délais d'attente. Et ce n'est pas un délai d'attente de connexion, ni de données de délai d'attente - deux de ces paramètres ne fonctionnent pas comme curl en fait se connecte avec succès et reçoit des données, de sorte que le délai d'attente dans l'erreur est toujours ~= 120000 ms.
OriginalL'auteur Alexey | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
J'ai remarqué que vous essayez d'analyser Craigslist; pourrait-il être un anti-protection contre les inondations de la leur?
Le problème existe toujours, si vous essayez d'analyser d'autres site? Une fois, j'ai eu le même problème en essayant récursive de la carte un FTP.
Concernant les délais d'attente, si vous êtes sûr que se n'est pas l'objet ni d'un délai d'attente de connexion, ni de données, un délai d'attente (CURLOPT_CONNECTTIMEOUT /CURLOPT_TIMEOUT) je vais essayer d'augmenter la limite de l'script PHP lui-même:
Je pense toujours que son une sorte d'anti-inondation mécanisme de la leur. Essayez de faire comme 1 demande par seconde ou moins, voir si il arrive encore.
Avez-vous essayez de vous connecter à l'aide d'une autre manière, comme telnet pour vous connecter à celui-ci? Peut-être que vous aurez un peu plus d'informations.
Par la voie, Craisglist conditions d'utilisation interdit explicitement les robots.
Merci de Hal, ce n'est pas mon projet ou de l'idée. Je vais remettre ce pour vous que c'est la seule réponse. Vais essayer d'ajouter dormir appeler, mais maintenant il travaille également plus ou moins avec ce glitch, il prend juste 2 minutes à ces échecs, puis il continue comme d'habitude, et il ne sont pas si beaucoup d'entre eux si il fonctionne 24/7
OriginalL'auteur João Pereira
Essayez d'augmenter
default_socket_timeout
dans votre fichier de configuration PHPphp.ini
(par exemple~/php.ini
), par exempleou le régler via curl dans le code PHP:
où
$res
est votre ressource existante variable.OriginalL'auteur kenorb