PHP cURL Contenu-Durée et le Contenu-Type de mal
J'essaie de me connecter à un site via PHP cURL et je suis seulement un "Bad Request" réponses.
J'ai joué un peu avec le fichier hosts et mis sur mon serveur pour vérifier les en-Têtes de Requête de mon navigateur envoie et de la comparer à la demande des en-têtes envoyés par cURL.
Tout est égal, à l'exception de:
Navigateur:
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
PHP cURL:
Content-Length: 51, 359
Content-Type: application/x-www-form-urlencoded; boundary=----------------------------5a377b7e6ba7
J'ai déjà mis en valeurs avec cette commande, mais il envoie toujours le mal des en-têtes:
curl_setopt($this->hCurl, CURLOPT_HTTPHEADER, array(
'Expect:',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: 51'
));
OriginalL'auteur Simon | 2012-02-05
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas avoir à régler la longueur du contenu vous-même. Si vous utiliser cURL pour envoyer un HTTP POST, il va calculer la longueur du contenu pour vous.
Si vous définissez la
CURLOPT_POSTFIELDS
valeur dans un tableau, il sera automatiquement soumettre la demande commemultipart/form-data
et l'utilisation d'une limite. Si vous passez une chaîne de caractères, il utiliseraapplication/x-www-form-urlencoded
alors assurez-vous de passer un urlencoded chaîne deCURLOPT_POSTFIELDS
et pas un tableau puisque vous voulez form-urlencoded.Vous devez faire ceci:
Dans les deux cas, vous n'avez pas besoin de définir la longueur du contenu, mais vous devez utiliser la première méthode pour obtenir
application/x-www-form-urlencoded
le codage de la forme.Si cela ne fonctionne pas, poster tout le code pertinentes à la création de la demande curl, (toutes les options, et les données que vous transmettez à elle), et qui devrait aider à résoudre le problème.
EDIT:
Ajoutée est un exemple j'ai trouvé qui fonctionne (j'ai échec de la connexion).
Puisque la longueur du contenu n'est pas défini, je me demande si la méthode de la requête n'est pas de POST, ou peut-être une autre option est primordial. En tout cas, j'ai mis à jour le post avec un exemple de travail. J'espère que ça vous met sur la bonne voie. Il utilise 1 curl objet de faire 2 demandes. Remarque, si vous avez besoin de faire une requête GET à nouveau, vous devez définir CURLOPT_POST, retour à 0.
Merci. vous. . beaucoup. Je n'avais pas voir la forêt pour les arbres. J'ai mis curlopt_customrequest de "POSTER" parce que j'ai utilisé pour passer un tableau à curlopt_postfields..... Avec l'aide d'une chaîne comme vous l'avez déjà mentionné, il doit travailler, mais j'ai accidentellement oublié de supprimer les customrequest chose.. C'est les petites choses que freak de la merde hors de nous, les programmeurs lorsque nous n'obtenons pas pourquoi il ne fonctionne pas.. 😉
a sauvé ma vie! J'utilise
http_build_query()
maintenant.MERCI @drew010 j'ai eu le même problème avec un logiciel, et a été le dénigrement de ma tête depuis une semaine à présent. Votre explication n'a pour moi :)!
OriginalL'auteur