Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting content body from http post using php CURL

Tags:

I am trying to debug an http post the I am trying to send from list application. I have been able to send the correct post from php CURL which corectly interfaces with my drupal 7 website and uploads an image.

In order to get this to work in my lisp application I really need to see the content body of my http post I have been able to see the headers using a call like this:

curl_setopt($curl,   CURLOPT_STDERR, $fp); curl_setopt($curl, CURLOPT_VERBOSE, 1); 

and the headers look the same in my lisp application but I have been unable to examine the body of the post. I have searched online and other people have asked this question but no one posted a response.

The content type of my http post is:

application/x-www-form-urlencoded 

I have also tried many http proxy debuging tools but they only ever the http GET to get my php page but never capture the get sent from server once the php code is executed.

EDIT: I have added a code snipet showing where I actually upload the image file.

// file $file = array(   'filesize' => filesize($filename),   'filename' => basename($filename),   'file' => base64_encode(file_get_contents($filename)),   'uid' => $logged_user->user->uid, );  $file = http_build_query($file);  // REST Server URL for file upload $request_url = $services_url . '/file';  // cURL $curl = curl_init($request_url); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded')); curl_setopt($curl,   CURLOPT_STDERR, $fp); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POST, 1); // Do a regular HTTP POST curl_setopt($curl, CURLOPT_POSTFIELDS, $file); // Set POST data curl_setopt($curl, CURLOPT_HEADER, FALSE);  // Ask to not return Header curl_setopt($curl, CURLOPT_COOKIE, "$cookie_session"); // use the previously saved session curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_FAILONERROR, TRUE); curl_setopt_array($curl, array(CURLINFO_HEADER_OUT => true) ); $response = curl_exec($curl); 
like image 411
Mike2012 Avatar asked Mar 14 '12 18:03

Mike2012


2 Answers

CURLOPT_VERBOSE should actually show the details. If you're looking for the response body content, you can also use CURLOPT_RETURNTRANSFER, curl_exec() will then return the response body.

If you need to inspect the request body, CURLOPT_VERBOSE should give that to you but I'm not totally sure.

In any case, a good network sniffer should give you all the details transparently.

Example:

$curlOptions = array(     CURLOPT_RETURNTRANSFER => TRUE,     CURLOPT_FOLLOWLOCATION => TRUE,     CURLOPT_VERBOSE => TRUE,     CURLOPT_STDERR => $verbose = fopen('php://temp', 'rw+'),     CURLOPT_FILETIME => TRUE, );  $url = "http://stackoverflow.com/questions/tagged/java"; $handle = curl_init($url); curl_setopt_array($handle, $curlOptions); $content = curl_exec($handle); echo "Verbose information:\n", !rewind($verbose), stream_get_contents($verbose), "\n"; curl_close($handle); echo $content; 

Output:

Verbose information: * About to connect() to stackoverflow.com port 80 (#0) *   Trying 64.34.119.12... * connected * Connected to stackoverflow.com (64.34.119.12) port 80 (#0) > GET /questions/tagged/java HTTP/1.1 Host: stackoverflow.com Accept: */*  < HTTP/1.1 200 OK < Cache-Control: private < Content-Type: text/html; charset=utf-8 < Date: Wed, 14 Mar 2012 19:27:53 GMT < Content-Length: 59110 <  * Connection #0 to host stackoverflow.com left intact  <!DOCTYPE html> <html>    <head>        <title>Newest &#39;java&#39; Questions - Stack Overflow</title>     <link rel="shortcut icon" href="http://cdn.sstatic.net/stackoverflow/img/favicon.ico">     <link rel="apple-touch-icon" href="http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png">     <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml"> ... 
like image 113
hakre Avatar answered Nov 02 '22 09:11

hakre


Just send it to a random local port and listen on it.

# terminal 1 nc -l localhost 12345  # terminal 2 php -e <?php $curl = curl_init('http://localhost:12345'); // etc 
like image 42
Tgr Avatar answered Nov 02 '22 08:11

Tgr