103

I'm building a Curl web automation app and am having some issue with not getting the desired outcome of my POST action, I am having some trouble figuring out how I can show the full POST request I am sending over (with headers), I have been searching on this but everything that comes up is the response headers, actually I want these too but also the request, which none of the posts I find on google seem to mention..

I know I can display the result of a curl request using something like this (forgive me if my syntax is off, I already shut down my virtual machine with my ide and code to refer to

 $result = curl($curl_exect) ; 

Anyways, I would greatly appreciate any advice on how to view the full headers, thanks

1

5 Answers 5

183

Here is all you need:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking ... // do curl request $headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers 
Sign up to request clarification or add additional context in comments.

2 Comments

How can one show the POST data as well? I.e. that added by curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
@DanDascalescu Since you POSTed the data, when creating the Curl request, there is no need to capture it back. Note: POSTing form values are sent as "Form Data", not headers, hence why the above does not show them. If you really need to see what's on the wire, try WireShark.
95

You can see the information regarding the transfer by doing:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true); 

before the request, and

$information = curl_getinfo($curl_exect); 

after the request

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

You can also use the CURLOPT_HEADER in your curl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true); $httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE); return $httpcode == 200; 

These are just some methods of using the headers.

4 Comments

I tried this but it just ouputs an array of the POST so its not showing the exact headers, only the POST and not exactly as the receiving server would see it so its not ideal for troubleshooting
The answer is not complete. Before the request is executed, you have to curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
this only shows what the server sent back. it seems like curl_setopt($ch,CURLOPT_VERBOSE,true); will allow you to see what you send to the server.
CURLINFO_HEADER_OUT doesn't exist
10

You can save all headers sent by curl to a file using :

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

Comments

8

You can make you request headers by yourself using:

// 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); 

Like writen on how make request

3 Comments

Thanks for the post, I guess I'm not fully understanding this as its a different library than curl, right? Is there a way to do this with just curl? If not, I will look into doing it this way, its just that I'm not familiar with fputs
This is actually native functionality of php
This is a cool answer because it exposes kind of the raw request. I'd always been taught to use cURL which is a library that sometimes has to be installed and isn't always available.
2

I had exactly the same problem lately, and I installed Wireshark (it is a network monitoring tool). You can see everything with this, except encrypted traffic (HTTPS).

10 Comments

WireShark runs on WinCap or another capturing systems, you have to have a atheros based chipset for it to work I think, why dont you just install chrome and press Ctrl+Shift+J then click the XHR Button and the file name and then see headers and data.
I tried wireshark but it doesn't seem to pick up my outgoing Curl POST traffic
I assumed that you were working on a local server, is it the case?
Robert, I'm trying to do what you said in Chrome, but its not doing anything when I do Ctrl+Shift+3, I'm searching for info on this but can't seem to find something relevant, what feature of chrome is this accessing? Thanks
Ok, I found this regarding viewing the headers in Chrome: google.com/support/forum/p/Chrome/… I believe its Ctrl+Shift+i to access this
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.