¿Mostrar encabezados de solicitud de POST de Curl? ¿Hay alguna forma de hacer esto?

87

Estoy creando una aplicación de automatización web Curl y tengo algún problema al no obtener el resultado deseado de mi acción POST, tengo problemas para averiguar cómo puedo mostrar la solicitud POST completa que estoy enviando (con encabezados), He estado buscando en esto, pero todo lo que aparece son los encabezados de respuesta, en realidad también quiero estos, pero también la solicitud, que ninguna de las publicaciones que encuentro en Google parece mencionar.

Sé que puedo mostrar el resultado de una solicitud curl usando algo como esto (perdóneme si mi sintaxis está apagada, ya apagué mi máquina virtual con mi ide y código para referirme

 $result = curl($curl_exect) ;

De todos modos, agradecería mucho cualquier consejo sobre cómo ver los encabezados completos, gracias

Almiar
fuente

Respuestas:

83

Puede ver la información relativa a la transferencia haciendo:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

antes de la solicitud, y

$information = curl_getinfo($curl_exect);

después de la solicitud

Ver: http://www.php.net/manual/en/function.curl-getinfo.php

También puede utilizar el CURLOPT_HEADERen sucurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Estos son solo algunos métodos para usar los encabezados.

RobertPitt
fuente
4
Intenté esto, pero solo genera una matriz de POST, por lo que no muestra los encabezados exactos, solo la POST y no exactamente como lo vería el servidor receptor, por lo que no es ideal para la resolución de problemas
Rick
5
La respuesta no es completa. Antes de que se ejecute la solicitud, debecurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
esto solo muestra lo que envió el servidor. parece curl_setopt ($ ch, CURLOPT_VERBOSE, true); le permitirá ver lo que envía al servidor.
Steven Teo
169

Aquí tienes todo lo que necesitas:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Joseph Lust
fuente
6
¿Cómo se pueden mostrar también los datos POST? Es decir, el agregado por curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu
@DanDascalescu Desde que publicaste los datos, al crear la solicitud Curl, no es necesario volver a capturarlos. Nota: Los valores de los formularios de PUBLICACIÓN se envían como "Datos de formulario", no como encabezados, por lo que el anterior no los muestra. Si realmente necesita ver lo que hay en el cable, pruebe WireShark.
Joseph Lust
10

Puede guardar todos los encabezados enviados por curl en un archivo usando:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);
Nassim Aouragh
fuente
6

Puede hacer que solicite encabezados usted mismo usando:

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

Como escrito sobre cómo hacer una solicitud

Liutas
fuente
Gracias por la publicación, supongo que no entiendo completamente esto como una biblioteca diferente a curl, ¿verdad? ¿Hay alguna manera de hacer esto con solo curl? Si no, buscaré hacerlo de esta manera, es solo que no estoy familiarizado con fputs
Rick
Esta es en realidad una funcionalidad nativa de php
SSH Este
1
Esta es una respuesta genial porque expone una especie de solicitud en bruto. Siempre me enseñaron a usar cURL, que es una biblioteca que a veces debe instalarse y no siempre está disponible.
Altimus Prime
2

Últimamente tuve exactamente el mismo problema e instalé Wireshark (es una herramienta de monitoreo de red). Puede ver todo con esto, excepto el tráfico cifrado (HTTPS).

Greg0ire
fuente
2
WireShark se ejecuta en WinCap u otro sistema de captura, debes tener un chipset basado en ateros para que funcione, creo, ¿por qué no instalas Chrome y presionas, Ctrl+Shift+Jluego haces clic en el XHRbotón y el nombre del archivo y luego ves los encabezados y los datos?
RobertPitt
Probé Wireshark, pero no parece que recoger a mi tráfico saliente Curl POSTE
Rick
Supuse que estabas trabajando en un servidor local, ¿es así?
greg0ire
Robert, estoy tratando de hacer lo que dijiste en Chrome, pero no hace nada cuando hago Ctrl + Shift + 3, estoy buscando información sobre esto pero parece que no puedo encontrar algo relevante, qué característica de Chrome es esto accediendo? Gracias
Rick
Ok, encontré esto con respecto a ver los encabezados en Chrome: google.com/support/forum/p/Chrome/ ... Creo que es Ctrl + Shift + i para acceder a esto
Rick