Show Curl POST Request Headers? Is there a way to do this?

165,944

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).

Share:
165,944
Rick
Author by

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, 2022

Comments

  • Rick
    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
    RobertPitt almost 14 years
    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.
  • Rick
    Rick almost 14 years
    I tried wireshark but it doesn't seem to pick up my outgoing Curl POST traffic
  • Rick
    Rick almost 14 years
    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
  • greg0ire
    greg0ire almost 14 years
    I assumed that you were working on a local server, is it the case?
  • Rick
    Rick almost 14 years
    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
  • Rick
    Rick almost 14 years
    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
  • Rick
    Rick almost 14 years
    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
  • Rick
    Rick almost 14 years
    In 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
    greg0ire almost 14 years
    Do 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
    Rick almost 14 years
    On 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
    greg0ire almost 14 years
    What do you mean by "normal"? When you refresh your page, do you get too much traffic? Can you filter out "abnormal" traffic?
  • SSH This
    SSH This about 12 years
    This is actually native functionality of php
  • Dan Dascalescu
    Dan Dascalescu over 10 years
    How can one show the POST data as well? I.e. that added by curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  • Joseph Lust
    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
    machineaddict over 8 years
    Don't bother using Wireshark which is hard to understand, use Fiddler. It shows you the exact headers, post, etc
  • naitsirch
    naitsirch about 8 years
    The answer is not complete. Before the request is executed, you have to curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
  • Steven Teo
    Steven Teo almost 7 years
    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.
  • Altimus Prime
    Altimus Prime almost 5 years
    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.