2017-09-29 1 views
0

Ce qui se passe est que j'ai un script en php où il fait de nombreuses demandes à un site Web et mon script est sur mon serveur. Cependant, le problème est le suivant:demande a expiré avec php + cURL

ERROR - REQUEST TIMED OUT

<?php 

$ch = curl_init(); 
$contador = 0; 
$ran = explode("\n", file_get_contents('nombres.txt')); 
$randomElement = $ran[array_rand($ran, 1)]; 

if ($file = fopen("correos.txt", "r")) { 
    while(!feof($file)) { 
     $line = fgets($file); 


$var_post_data = 'site_id=1&email='.$line.'&name='.$randomElement.'id=39494393'; 
curl_setopt($ch, CURLOPT_URL,"site"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$var_post_data); //Post Fields 
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$headers = [ 
    'Cookie: ws_visit_id=2_170927230320231_5878; has_track_visit=true; _uetsid=_uet0639d46c', 
    'DNT: 1', 
    'Connection: keep-alive', 
    'Accept: application/json, text/javascript, */*; q=0.01', 
    'Accept-Language: en-US,en;q=0.5', 
    'Cache-Control: no-cache', 
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 
    'Host: site', 
    'Referer: site', 
    'User-Agent: ' . $randomElement, 
    'X-Requested-With: XMLHttpRequest' 
]; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
echo curl_errno($ch); 
echo curl_error($ch); 
$server_output = curl_exec ($ch); 

    echo $server_output ; 
    echo $contador; 
    $fp = fopen('data.txt', 'a'); 
    fwrite($fp, $server_output); 
    $stringData = "-------------" . "\n"; 
    fwrite($fp, $stringData); 

    // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
if(curl_errno($ch) == 26) { 
    sleep(30); 
} 
else { 
    echo 'Not errors'; 
    continue; 
} 


    } 
    fclose($file); 
} 
curl_close ($ch); 



?> 

Je précise également que je l'ai déjà configuré le « max_execution_time » fonction sur mon serveur et le mettre à « 0 ». J'apprécierais que vous puissiez m'aider, je veux que le script le fasse, et si le serveur distant donne cette erreur, laissez mon script faire un sleep(). J'ai essayé de toutes les façons et ça ne marche pas pour moi.

Merci!

+0

'$ ligne = fgets (fichier $),' à chaque itération cette variable est écrasée, contenant efficacement que la dernière ligne? Sinon, je ne vois rien d'inhabituel avec votre script qui conduirait à des erreurs de timeout du point de vue de votre client, avez-vous le contrôle du serveur sur lequel vous postez? – Scuzzy

+0

Comment puis-je résoudre ce problème d'écrasement? donc j'essaye de revenir ici ... Et non, je n'ai pas le contrôle du serveur distant – Zenabria

+0

@Scuzzy Et merci pour toi .. – Zenabria

Répondre

0

vous avez plusieurs questions, 1: $ran = explode("\n", file_get_contents('nombres.txt')); ici vous utilisez la nouvelle ligne de style linux \ n comme séparateur, qui serait ok sauf if ($file = fopen("correos.txt", "r")) { ici que vous l'ouvrez en mode texte OS natif, ce qui signifie des sauts de ligne sera lu avec \ r \ n sur certains systèmes d'exploitation (comme Windows), \ n sur certains (comme Linux), et sur certains systèmes d'exploitation (comme les anciens Mac), cette ligne ne fonctionne donc que sur certains systèmes d'exploitation. pour le rendre indépendant de la plate-forme, ouvrez-le en mode binaire, "rb". suivant: $var_post_data = 'site_id=1&email='.$line.'&name='.$randomElement.'id=39494393'; ici $ ligne et n'urlencoded randomElement $, donc si elles contiennent ou & = ou ÆØÅ ou beaucoup d'autres caractères, l'encodage sera malformé, et le serveur est susceptible de répondre avec 400 Bad Request ou autre lecture des données corrompues. utilisez urlencode() pour l'urlencoder correctement. suivant: ce code semble suspect: Cookie: ws_visit_id=2_170927230320231_5878, êtes-vous sûr de vouloir coder en dur l'identifiant de cookie, au lieu d'en obtenir un nouveau? que l'identifiant du cookie a expiré sans doute depuis longtemps .. suivante: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 cet en-tête est invalide, x-www-urlencoded ne prend pas en charge UTF8, il est toujours dans le codage ASCII, avec un codage spécial pour les caractères non-ascii, mais ne pas ajouter cet en-tête à Tout, libcurl l'ajoutera pour vous, et contrairement à vous, libcurl ne fera aucune faute de frappe en le faisant. mais aucun de ces problèmes n'explique votre message d'erreur dans la capture d'écran. On dirait qu'il y a un système d'équilibrage de charge dans votre serveur http qui démarre pour une raison quelconque, c'est un problème de configuration de serveur web, pas un problème de php. l'erreur est probablement générée par Apache ou Nginx ou IIS ou tout ce qui est en face de php.