Pregunta

Casi cualquier programador PHP que se encuentre trabajando se ha enfrentado a tener que usar CURL para enviar solicitudes HTTP sin procesar, ya sea para el procesamiento de pagos con tarjeta de crédito, el nefasto raspado de pantalla o algo intermedio.

Casi cualquier foro donde se congregan los programadores de PHP tiene un gran número de personas que no pueden obtener las funciones de cURL para hacer lo que quieren .

Cuando cURL no está funcionando para ti, ¿qué técnicas de solución de problemas usas para descubrir por qué no funciona? ¿Qué problemas raros con la implementación curl de PHP te has encontrado? Si alguien pregunta " HALP MY CURL IZ BROKEN " en un foro, ¿cuáles son los pasos que debe seguir para averiguar por qué su solicitud no funciona?

¿Fue útil?

Solución

Creo que la opción CURLINFO_HEADER_OUT es muy útil.

<?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);
  }
}

Otros consejos

En realidad, nunca uso CURL (en PHP). El api de la secuencia de PHP es mucho más ordenado, y también se puede utilizar para POST datos. Wez Furlong tiene un artículo sobre esto.

¿Si fuera a usarlo? Comenzaría con la activación de todos los mensajes (configurando el informe de errores en E_ALL). Si encuentro que PHP no me dice lo que necesito en los mensajes de error, probablemente usaría un enfoque proxy para ver qué está pasando realmente. Cambiar la URL de destino a una página de PHP local que contenga algo como

<?php
var_dump(

En realidad, nunca uso CURL (en PHP). El api de la secuencia de PHP es mucho más ordenado, y también se puede utilizar para POST datos. Wez Furlong tiene un artículo sobre esto.

¿Si fuera a usarlo? Comenzaría con la activación de todos los mensajes (configurando el informe de errores en E_ALL). Si encuentro que PHP no me dice lo que necesito en los mensajes de error, probablemente usaría un enfoque proxy para ver qué está pasando realmente. Cambiar la URL de destino a una página de PHP local que contenga algo como

netcat -l -p 80

es una forma. Otra forma es usar una utilidad como netcat para escuchar en el puerto 80 y enviar la solicitud allí:

<*>

Esto no devolverá nada a curl, pero le permitirá ver exactamente lo que se envía al servidor, lo que podría ser suficiente para diagnosticar el problema.

También puede recuperar los encabezados de PHP usando apache_request_headers () función. Sin embargo, en la mayoría de los casos prefiero el enfoque de netcat, ya que garantiza que veo la verdad sin modificar y también muestra los datos de publicación sin procesar.

POST); var_dump(

En realidad, nunca uso CURL (en PHP). El api de la secuencia de PHP es mucho más ordenado, y también se puede utilizar para POST datos. Wez Furlong tiene un artículo sobre esto.

¿Si fuera a usarlo? Comenzaría con la activación de todos los mensajes (configurando el informe de errores en E_ALL). Si encuentro que PHP no me dice lo que necesito en los mensajes de error, probablemente usaría un enfoque proxy para ver qué está pasando realmente. Cambiar la URL de destino a una página de PHP local que contenga algo como

<*>

es una forma. Otra forma es usar una utilidad como netcat para escuchar en el puerto 80 y enviar la solicitud allí:

<*>

Esto no devolverá nada a curl, pero le permitirá ver exactamente lo que se envía al servidor, lo que podría ser suficiente para diagnosticar el problema.

También puede recuperar los encabezados de PHP usando apache_request_headers () función. Sin embargo, en la mayoría de los casos prefiero el enfoque de netcat, ya que garantiza que veo la verdad sin modificar y también muestra los datos de publicación sin procesar.

GET); var_dump(

En realidad, nunca uso CURL (en PHP). El api de la secuencia de PHP es mucho más ordenado, y también se puede utilizar para POST datos. Wez Furlong tiene un artículo sobre esto.

¿Si fuera a usarlo? Comenzaría con la activación de todos los mensajes (configurando el informe de errores en E_ALL). Si encuentro que PHP no me dice lo que necesito en los mensajes de error, probablemente usaría un enfoque proxy para ver qué está pasando realmente. Cambiar la URL de destino a una página de PHP local que contenga algo como

<*>

es una forma. Otra forma es usar una utilidad como netcat para escuchar en el puerto 80 y enviar la solicitud allí:

<*>

Esto no devolverá nada a curl, pero le permitirá ver exactamente lo que se envía al servidor, lo que podría ser suficiente para diagnosticar el problema.

También puede recuperar los encabezados de PHP usando apache_request_headers () función. Sin embargo, en la mayoría de los casos prefiero el enfoque de netcat, ya que garantiza que veo la verdad sin modificar y también muestra los datos de publicación sin procesar.

SERVER);

es una forma. Otra forma es usar una utilidad como netcat para escuchar en el puerto 80 y enviar la solicitud allí:

<*>

Esto no devolverá nada a curl, pero le permitirá ver exactamente lo que se envía al servidor, lo que podría ser suficiente para diagnosticar el problema.

También puede recuperar los encabezados de PHP usando apache_request_headers () función. Sin embargo, en la mayoría de los casos prefiero el enfoque de netcat, ya que garantiza que veo la verdad sin modificar y también muestra los datos de publicación sin procesar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top