Impossible de se connecter au site en HTTPS à l'aide de cURL. Retourne 0 longueur du contenu. Que puis-je faire?
J'ai un site qui se connecte à l'aide de cURL (dernière version) à une passerelle sécurisée pour le paiement.
Le problème est cURL retourne toujours 0 longueur du contenu. Je reçois uniquement les en-têtes. Et seulement lorsque j'ai mis cURL pour revenir en-têtes. J'ai les indicateurs suivants en place.
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $gatewayURI);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
L'en-tête retournée est
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Tue, 25 Nov 2008 01:08:34 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 0
Content-Type: text/html
Set-Cookie: ASPSESSIONIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/
Cache-control: private
J'ai aussi essayé de roulage avec les différents sites et de leur retour contenu de l'amende. Je pense que le problème pourrait avoir quelque chose à voir avec la connexion https.
J'ai parlé avec la société et qu'ils sont inutiles.
Quelqu'un d'autre a vécu cette erreur et en savoir un travail autour? Dois-je fossé cURL et essayer de l'utiliser fsockopen()
?
Merci. 🙂
Vous devez vous connecter pour publier un commentaire.
Vous devriez aussi essayer de vérifier les messages d'erreur dans curl_error(). Vous pourriez avoir besoin de le faire une fois après chaque curl_* fonction.
http://www.php.net/curl_error
J'ai eu le même problème aujourd'hui.
Curl est livré avec un fichier obsolète pour authentifier les certificats HTTPS de.
obtenir la nouvelle à partir de:
http://curl.haxx.se/ca/cacert.pem
l'enregistrer dans certains dir sur votre site
et ajouter
À toutes les demandes 🙂
IGNORER tout d'imbécile commentaires à propos de la désactivation CURLOPT_VERIFYPEER et CURLOPT_VERIFYHOST!! Qui laisse votre code vulnérables à l'homme dans le milieu des attaques!
Décembre 2016 edit:
Résoudre correctement, en utilisant Jasen la méthode mentionnée ci-dessous.
ajouter
curl.cainfo=/etc/ssl/certs/ca-certificates.crt
vous php.iniOctobre 2017 edit:
Il y a maintenant un compositeur package qui vous aide à gérer les certificats d'autorité de certification, de sorte que vous n'êtes pas vulnérable si votre cacert.pem devient obsolète en raison de la révocation de certificats.
https://github.com/paragonie/certainty ->
composer require paragonie/certainty:dev-master
curl.cainfo=/etc/ssl/certs/ca-certificates.crt
de mon php.ini - ce qui économise de téléchargement manuel et l'édition de beaucoup de code php.Remarque: Ce n'est strictement pas l'utiliser en production. Si vous voulez rapidement debug, cela peut être utile. Sinon, veuillez utiliser @SchizoDuckie la réponse ci-dessus.
Simplement les ajouter. Elle fonctionne.
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
Maintenant il fonctionne très bien.Juste eu une très similaires problème et résolu par l'ajout d'
Apparemment le site que je suis aller chercher redirige vers un autre emplacement et php-curl n'a pas suivi redirige par défaut.
J'ai eu une situation où cela m'a aidé: (PHP 5.4.16 sur Windows)
Chaque fois que je teste quelque chose avec PHP/Curl, je l'ai essayer en ligne de commande, tout d'abord, comprendre ce qui fonctionne, puis à port mes options pour PHP.
Parfois, vous devez mettre à jour votre Curl certificats à la dernière version de ne pas avoir d'erreurs avec le protocole https.
J'ai utilisé
file_get_contents
à l'aide destream_create_context
et il fonctionne très bien:il y a peut être un problème à votre société d'hébergement web d'où vous testez la communication sécurisée pour la passerelle, qu'ils pourraient ne pas vous permettre de le faire.
aussi il y a peut être un nom d'utilisateur, le mot de passe qui doit être fourni avant la connexion à l'hôte distant.
ou votre IP peut-être besoin d'être dans la liste des IP pour le serveur distant pour la communication à entreprendre.
J'ai découvert cette erreur lors d'un récent projet d'application. J'ai écrit à courir à partir de la ligne de commande ou de la fenêtre du navigateur, donc j'ai été serveur à l'aide de la détection pour obtenir l'URL relative de ce document, j'en avais besoin. Le problème est, le site est en https, et à chaque fois j'ai tenté d'accéder à http://(même serveur), cURL utilement changé en https.
Cela fonctionne bien à partir du navigateur, mais à partir de la ligne de commande, je ne puis obtenir une erreur SSL même avec à la fois de vérifier la valeur false. Ce que j'avais à faire était,
1) Vérifier la valeur de $_SERVER['HTTP_HOST']. Si, de l'usage ($_SERVER['HTTPS'] ? "https://" : "http://").$_SERVER['HTTP_HOST']
2) Vérifier la valeur de $_SERVER['COMPUTERNAME'], et si elle correspond le serveur de production, de fournir l'URL https. ("https://(servername)")
3) Si ni la condition passée, cela signifie que je suis en cours d'exécution en ligne de commande sur un serveur différent, et l'utilisation "http://localhost".
Maintenant, cela a fonctionné, mais c'est un hack. Aussi, je n'ai jamais fait comprendre pourquoi sur un serveur (https) cURL changé mon URL, alors que sur l'autre (également https) il a quitté mon URL seuls.
Bizarre.
La meilleure façon d'utiliser le protocole https et d'éviter les questions de sécurité est d'utiliser Firefox (ou un autre outil) et télécharger le certificat de votre serveur. Cette page m'a beaucoup aidé, et elles ont été les étapes qui ont travaillé pour moi:
1) Ouvrir dans Firefox, l'URL que vous allez utiliser avec CURL
2) Sur la barre d'adresse, cliquez sur le
padlock
>more information
(FF versions peuvent avoir différents menus, juste le trouver). Cliquez sur le Afficher le certificat bouton >Details
onglet.3) mettre en Évidence le "droit" certificat
Certificate hierarchy
. Dans mon cas, c'était le deuxième des trois, appelé "cPanel, Inc. Autorité De Certification". Je viens de découvrir celui de droite par "essai et erreur" la méthode.4) Cliquez sur le Export bouton. Dans mon cas, celui qui a travaillé était le type de fichier "PEM avec des chaînes" (encore une fois par la méthode essai-erreur).
5) Puis dans votre script PHP ajouter:
En outre, je dirais que nous devons payer l'attention sur le fait que ces mesures auront probablement besoin d'être refait une fois par an ou chaque fois que l'URL certificat est remplacé ou renouvelé.
Vous êtes à l'aide de la méthode POST, mais êtes-vous fournir un tableau de données? E. g.