views:

52

answers:

3

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  A: 

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

greg0ire
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.
RobertPitt
I tried wireshark but it doesn't seem to pick up my outgoing Curl POST traffic
Rick
I assumed that you were working on a local server, is it the case?
greg0ire
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
yes its a local server
Rick
Rick
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
Rick
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.
greg0ire
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
Rick
What do you mean by "normal"? When you refresh your page, do you get too much traffic? Can you filter out "abnormal" traffic?
greg0ire
+1  A: 

You can see the information regarding the transfer by doing:

$information = curl_getinfo($curl_exect);

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

You can also use the CURLOPT_HEADER in your setopt

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

These are just some methods of using the headers

RobertPitt
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
Rick
A: 

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

Liutas
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