2011-08-03 23 views
7

¿Cómo puedo ver los encabezados de solicitud completos, incluyendo datos de publicación, usando libcurl en php?Ver encabezados de solicitud de cURL con datos de POST

estoy tratando de simular el cargo de una página, que cuando se realiza desde un navegador y ver en Live HTTP Headers es así:

https://###.com 
POST /###/### HTTP/1.1 
Host: ###.###.com 
...snipped normal looking headers... 
Content-Type: multipart/form-data; boundary=---------------------------28001808731060 
Content-Length: 697 
-----------------------------28001808731060 
Content-Disposition: form-data; name="file_data"; filename="stats.csv" 
Content-Type: text/csv 
id,stats_id,scope_id,stat_begin,stat_end,value 
61281,1,4,2011-01-01 00:00:00,2011-12-31 23:59:59,0 
-----------------------------28001808731060 
Content-Disposition: form-data; name="-save" 
Submit 
-----------------------------28001808731060-- 

Así que muy bien ver el archivo estoy subiendo, es contenido, todo está allí. Pero todos mis intentos de obtener datos de cURL cuando trato de hacer el mismo puesto de php (usando CURLOPT_VERBOSE o CURLINFO_HEADER_OUT) muestran los encabezados de solicitud que carecen de los datos de envío, así:

POST /###/### HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Host: ###.###.com 
...snipped normal-looking headers... 
Content-Length: 697 
Content-Type: multipart/form-data; boundary=----------------------------e90de36c15f5 

basado en el contenido -Algún aquí, parece que las cosas van bien, pero realmente ayudaría a mis esfuerzos de depuración para poder ver la solicitud completa. También me molesta que sea difícil, debería ser capaz de ver todo; Sé que debo estar perdiendo algo.

--- --- EDITAR

Lo que estoy buscando es el equivalente de this:

curl --trace-ascii debugdump.txt http://www.example.com/ 

que parece estar disponible con la opción de CURLOPT_DEBUGFUNCTION en libcurl, pero ISN' t implementado en php. Abucheo.

Respuesta

1

Usted está enviando multipart/formdata. cURL básicamente muestra el encabezado HTTP completamente, supongo. El "problema" es que multipart/formdata consta de varias partes. Esto va más allá de "encabezados HTTP de primer nivel" y es parte del cuerpo del "cuerpo HTTP principal".

No conozco su entorno, pero también puede depurar utilizando la supervisión del tráfico TCP. Para esto, puede usar Wireshark o tcpdump - Wireshark también puede mostrar archivos de volcado creados por tcpdump.

+2

Esto es muy útil, gracias. Me parece que todavía debería ser posible obtener información sobre el "cuerpo HTTP principal" de la solicitud de cURL. – Chris

5

Tenía una necesidad de hacer precisamente esto, pero necesitaba probar la comunicación con un banco.

Es extremadamente fácil de usar Fiddler2, activar HTTPS descifrado del tráfico, y tienen uso cURL Fiddler2 como un proxy para la depuración en esta situación:

$proxy = '127.0.0.1:8888'; 
curl_setopt($ch, CURLOPT_PROXY, $proxy); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
+0

¡Gracias por la información! Lo intentaré la próxima vez. – Chris

+0

No hay problema, también puede recordar configurar cURL para aceptar TODOS los certs temporalmente ya que Fiddler2 usa el suyo (para interceptar el tráfico HTTPS y descifrarlo). Creo que es algo así como: curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, falso); – mk12

Cuestiones relacionadas