Show Curl POST Request Headers? Is there a way to do this?
Solution 1
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.
Solution 2
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
Solution 3
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);
Solution 4
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
Solution 5
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).
Rick
Web programmer with an interest in web task automation, building websites, etc, I prefer to do everything in Python now as I have moved to it from using a variety of other languages in the past. I also like to do front-end AJAX / javascript work but am moving to do this through Python as well, with the Pyjamas framework.
Updated on July 08, 2022Comments
-
Rick almost 2 years
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
-
RobertPitt almost 14 yearsWireShark 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 theXHR
Button and the file name and then see headers and data. -
Rick almost 14 yearsI tried wireshark but it doesn't seem to pick up my outgoing Curl POST traffic
-
Rick almost 14 yearsI 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
-
greg0ire almost 14 yearsI assumed that you were working on a local server, is it the case?
-
Rick almost 14 yearsRobert, 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
-
Rick almost 14 yearsThanks 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
-
Rick almost 14 yearsOk, I found this regarding viewing the headers in Chrome: google.com/support/forum/p/Chrome/… I believe its Ctrl+Shift+i to access this
-
Rick almost 14 yearsIn Chrome, I tried that with the XHR button but its still not showing anything about my curl script, I'm running a local WAMP server so I'm not sure how to get it to pick this up... thanks for any advice
-
greg0ire almost 14 yearsDo you see any traffic? If not check that you are monitoring the good network interface. If yes, perhaps you did not see the request. Use the filters to show only http traffic, to the host to which you are doing the request.
-
Rick almost 14 yearsOn wireshark? It shows traffic but not the normal POST traffic, I only have 1 network interface so I'm not sure what else can be done to make it show correctly
-
greg0ire almost 14 yearsWhat do you mean by "normal"? When you refresh your page, do you get too much traffic? Can you filter out "abnormal" traffic?
-
SSH This about 12 yearsThis is actually native functionality of php
-
Dan Dascalescu over 10 yearsHow can one show the POST data as well? I.e. that added by curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
-
Joseph Lust over 10 years@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.
-
machineaddict over 8 yearsDon't bother using Wireshark which is hard to understand, use Fiddler. It shows you the exact headers, post, etc
-
naitsirch about 8 yearsThe answer is not complete. Before the request is executed, you have to
curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
-
Steven Teo almost 7 yearsthis 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.
-
Altimus Prime almost 5 yearsThis 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.