Question

Presque tous les programmeurs PHP en activité ont dû utiliser CURL pour envoyer des requêtes HTTP brutes, que ce soit pour le traitement des paiements par carte de crédit, le grattage de l'écran néfaste ou quelque chose entre les deux.

Presque tous les forums rassemblant des programmeurs PHP comptent un grand nombre de personnes qui ne parviennent pas à faire en sorte que les fonctions cURL fassent ce qu'elles veulent .

Lorsque cURL ne fonctionne pas pour vous, quelles techniques de dépannage utilisez-vous pour comprendre pourquoi cela ne fonctionne pas? Quels pièges étranges avez-vous rencontrés avec l'implémentation PHP de Curl? Si quelqu'un demande "HALP MY CURL IZ BROKEN" question sur un forum, quelles sont les étapes à suivre pour comprendre pourquoi leur requête ne fonctionne pas?

Était-ce utile?

La solution

Je trouve l'option CURLINFO_HEADER_OUT très utile.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';

echo '<fieldset><legend>response</legend>
  <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';

function dbg_curl_data($curl, $data=null) {
  static $buffer = '';

  if ( is_null($curl) ) {
    $r = $buffer;
    $buffer = '';
    return $r;
  }
  else {
    $buffer .= $data;
    return strlen($data);
  }
}

Autres conseils

En fait, je n’utilise jamais CURL (en php). L'API de flux PHP est beaucoup plus soignée et peut également être utilisée pour poster des données. Wez Furlong a publié un article à ce sujet.

Si je devais l'utiliser? Je commencerais par activer tous les messages (paramétrant le signalement des erreurs sur E_ALL). Si je découvre que PHP ne me dit pas ce dont j'ai besoin dans les messages d'erreur, j'utiliserais probablement une approche de type proxy pour voir ce qui se passe réellement. Changer l'URL cible en une page php locale contenant quelque chose comme

<?php
var_dump(

En fait, je n’utilise jamais CURL (en php). L'API de flux PHP est beaucoup plus soignée et peut également être utilisée pour poster des données. Wez Furlong a publié un article à ce sujet.

Si je devais l'utiliser? Je commencerais par activer tous les messages (paramétrant le signalement des erreurs sur E_ALL). Si je découvre que PHP ne me dit pas ce dont j'ai besoin dans les messages d'erreur, j'utiliserais probablement une approche de type proxy pour voir ce qui se passe réellement. Changer l'URL cible en une page php locale contenant quelque chose comme

netcat -l -p 80

est à sens unique. Une autre solution consiste à utiliser un utilitaire tel que netcat pour écouter sur le port 80 et envoyer la demande à cet emplacement:

<*>

Cela ne retournera rien à curl, mais cela vous permettra de voir exactement ce qui est envoyé au serveur, ce qui pourrait suffire à diagnostiquer le problème.

Vous pouvez également récupérer les en-têtes de PHP en utilisant le apache_request_headers () fonction. Cependant, dans la plupart des cas, je préfère l'approche netcat, car elle garantit que je vois la vérité non modifiée et affiche également les données de publication brutes.

POST); var_dump(

En fait, je n’utilise jamais CURL (en php). L'API de flux PHP est beaucoup plus soignée et peut également être utilisée pour poster des données. Wez Furlong a publié un article à ce sujet.

Si je devais l'utiliser? Je commencerais par activer tous les messages (paramétrant le signalement des erreurs sur E_ALL). Si je découvre que PHP ne me dit pas ce dont j'ai besoin dans les messages d'erreur, j'utiliserais probablement une approche de type proxy pour voir ce qui se passe réellement. Changer l'URL cible en une page php locale contenant quelque chose comme

<*>

est à sens unique. Une autre solution consiste à utiliser un utilitaire tel que netcat pour écouter sur le port 80 et envoyer la demande à cet emplacement:

<*>

Cela ne retournera rien à curl, mais cela vous permettra de voir exactement ce qui est envoyé au serveur, ce qui pourrait suffire à diagnostiquer le problème.

Vous pouvez également récupérer les en-têtes de PHP en utilisant le apache_request_headers () fonction. Cependant, dans la plupart des cas, je préfère l'approche netcat, car elle garantit que je vois la vérité non modifiée et affiche également les données de publication brutes.

GET); var_dump(

En fait, je n’utilise jamais CURL (en php). L'API de flux PHP est beaucoup plus soignée et peut également être utilisée pour poster des données. Wez Furlong a publié un article à ce sujet.

Si je devais l'utiliser? Je commencerais par activer tous les messages (paramétrant le signalement des erreurs sur E_ALL). Si je découvre que PHP ne me dit pas ce dont j'ai besoin dans les messages d'erreur, j'utiliserais probablement une approche de type proxy pour voir ce qui se passe réellement. Changer l'URL cible en une page php locale contenant quelque chose comme

<*>

est à sens unique. Une autre solution consiste à utiliser un utilitaire tel que netcat pour écouter sur le port 80 et envoyer la demande à cet emplacement:

<*>

Cela ne retournera rien à curl, mais cela vous permettra de voir exactement ce qui est envoyé au serveur, ce qui pourrait suffire à diagnostiquer le problème.

Vous pouvez également récupérer les en-têtes de PHP en utilisant le apache_request_headers () fonction. Cependant, dans la plupart des cas, je préfère l'approche netcat, car elle garantit que je vois la vérité non modifiée et affiche également les données de publication brutes.

SERVER);

est à sens unique. Une autre solution consiste à utiliser un utilitaire tel que netcat pour écouter sur le port 80 et envoyer la demande à cet emplacement:

<*>

Cela ne retournera rien à curl, mais cela vous permettra de voir exactement ce qui est envoyé au serveur, ce qui pourrait suffire à diagnostiquer le problème.

Vous pouvez également récupérer les en-têtes de PHP en utilisant le apache_request_headers () fonction. Cependant, dans la plupart des cas, je préfère l'approche netcat, car elle garantit que je vois la vérité non modifiée et affiche également les données de publication brutes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top