79 votes

Comment résoudre l'erreur cURL (7) : couldn't connect to host ?

J'envoie un code d'article à un service web au format xml en utilisant cURL(php). J'obtiens la réponse correcte en localhost, mais quand je le fais sur le serveur il montre

Erreur cURL (7) : Impossible de se connecter à l'hôte.

Et voici mon code :

function xml_post($post_xml, $url)
{
    $user_agent = $_SERVER['HTTP_USER_AGENT'];

    $ch = curl_init();    // initialize curl handle
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);          
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_xml); 
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
//  curl_setopt($ch, CURLOPT_PORT, $port);          

    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    if ($curl_errno > 0) {
            echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
            echo "Data received\n";
    }
    curl_close($ch);

    echo $data;
}

J'envoie le code de l'article au Tally et je récupère les détails à partir de celui-ci. J'ai essayé d'utiliser les deux versions de php 4+ et php5+, mais rien ne fonctionne Aucune solution.

0 votes

Choisissez un proxy qui utilise un port 80

0 votes

Utiliser l'option curl verbose pour obtenir plus d'informations

0 votes

J'ajouterai deux choses ici qui ont finalement permis de résoudre mon problème : 1. exécuter cURL à partir de la ligne de commande avec --verbose 2. Si vous êtes sous OSX avec Little Snitch (ou similaire), regardez ça.

55voto

Baba Points 49157

Code d'erreur CURL 7 (CURLE_COULDNT_CONNECT)

est très explicite ... il signifie Failed to connect() to host or proxy.

Le code suivant fonctionnerait sur n'importe quel système :

$ch = curl_init("http://google.com");    // initialize curl handle
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
print($data);

Si vous ne pouvez pas voir la page de Google, alors your URL is wrong ou vous avez des firewall o restriction question.

0 votes

Je suis capable de voir la page google. Mais alors la même url je l'utilise dans localhost et là il fonctionne bien.

0 votes

C'est votre URL ... pouvez-vous me donner un exemple d'URL que je puisse tester pour vous.

0 votes

Comment surmonter le problème du pare-feu.

31voto

Ali Points 9

L'erreur "CURL ERROR 7 Failed to connect to Permission denied" est provoquée lorsque, pour une raison quelconque, la demande curl est bloquée par un pare-feu ou un élément similaire.

vous rencontrerez ce problème lorsque la requête curl n'utilise pas les ports standards.

Par exemple, si vous faites curl vers une URL qui est sur le port 1234, vous serez confronté à ce problème alors que l'URL avec le port 80 vous donnera des résultats facilement.

Le plus souvent, cette erreur a été observée sur CentOS et tout autre système d'exploitation avec 'SElinux'.

vous devez soit désactiver ou changer 'SElinux' en permissif

Jetez un coup d'œil à celui-ci

http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied

J'espère que cela vous aidera

18voto

Iman Marashi Points 2465

Si vous avez essayé toutes les méthodes et échoué, essayez cette commande :

setsebool -P httpd_can_network_connect on

0 votes

Merci, ça marche ! :))

1 votes

Cela vient de me sauver après des heures passées à chercher les mauvais bogues sur un très vieux script PHP pendant une migration de serveur. La seule erreur dans mes journaux était [7] ce que je n'avais pas réalisé était dû à la boucle. Je suis tombé sur cette réponse et il est de nouveau opérationnel !

0 votes

Je n'arrive vraiment pas à me comprendre. Enfin, mes capacités sous Selinux sont vraiment superficielles :/.

5voto

prince jose Points 167

En PHP, si votre réseau est sous proxy. Vous devez définir l'URL et le port du proxy

curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number

Ceci résout mon problème

4voto

Idealdo Félix Points 11

Dans mon cas, j'avais quelque chose comme cURL Error (7): ... Operation Timed Out . J'utilise la connexion réseau de l'entreprise pour laquelle je travaille. J'avais besoin de créer quelques variables d'environnement. Ce qui suit a fonctionné pour moi :

Dans le terminal Linux :

$ export https_proxy=yourProxy:80
$ export http_proxy=yourProxy:80  

Dans Windows, j'ai créé (les mêmes) variables d'environnement à la manière de Windows.

J'espère que cela vous aidera !

Salutations !

0 votes

Votre proxy est - 127.0.0.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X