How to capture a plain copy of my HTTP request

1.7k Views Asked by At

I am trying to communicate with anREST API using cURL and PHP. But, I am getting an issue from the API and I need to be able to see my HTTP request in plain text where I can analyses it and correct it.

I tried the following to write my request to a file

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

But this does not show me the JSON data.

Here is what I get in the request.txt file

* Hostname servername was found in DNS cache
*   Trying INTERNAL IP...
* Connected to servername (INTERNAL IP) port 8018 (#0)
> PUT /icws/1163386002/messaging/subscriptions/queues/blahblah HTTP/1.1
Host: servername:8018
Accept: */*
ININ-ICWS-CSRF-Token: WAhtYWxoYXlla1dBY2GHSDMNDFtjMDcwZmIyYy1mguc4LTQ3YjEtODgzMy1iOTBkM2ZhYWHfoyNmYTlYCjEwLjAuNC4xNjA=
ININ-ICWS-Session-ID: 1163386002
Cookie: icws_1163386002=232sggsdfgdabe-404c-8d8c-12345dfgdfg
Content-Length: 156
Content-Type: application/x-www-form-urlencoded

* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 500 Internal Server Error
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Expires: 0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Content-Type: application/vnd.inin.icws+JSON; charset=utf-8
< Date: Tue, 12 May 2015 17:52:52 GMT
< Server: HttpPluginHost
< Content-Length: 90
< 
* Connection #0 to host servername left intact

I would like to see the JSON string in plain text.

Here is how I am doing my cURL call using PHP

private function _processRequest($method, $uri, $data = false, $header = NULL, &$httpRespond = array(), &$httpCode = NULL)
{
    $ch = curl_init();
    $url = $this->_baseURL . $uri;

    if( 
           ($method == 'POST' || $method == 'PUT') 
        && $data
    ){
        $jsonString = json_encode( $data );
        curl_setopt( $ch, CURLOPT_POSTFIELDS, $jsonString );
    }

    if($method == 'POST'){
        curl_setopt($ch, CURLOPT_POST, true);
    } elseif( $method == 'PUT'){
        //curl_setopt($ch, CURLOPT_PUT, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    } else {
        if ($data){
            $url = sprintf("%s?%s", $url, http_build_query($data));
        }
    }   

    //disable the use of cached connection
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

    //return the respond from the API
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    //return the HEADER respond from the API
    curl_setopt($ch, CURLOPT_HEADER, true);

    //add custom headers
    if(!empty($header)){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }

    //enable SSL
    if( $this->_protocol == 'https' ){
        curl_setopt($ch, CURLOPT_CAINFO, $this->_cainfo);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
    }

    //set the URL
    curl_setopt($ch, CURLOPT_URL, $url);

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


    $respond = curl_exec($ch);

    //throw cURL exception
    if($respond === false){
        $errorNo = curl_errno($ch);
        $errorMessage = curl_error($ch);

        throw new ApiException($errorMessage, $errorNo);
    }   

    list($header, $body) = explode("\r\n\r\n", $respond, 2);

    $httpRespond = $this->_http_parse_headers($header);


    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  

    $result = json_decode($body, true);

    return $result;
}

How do I see the entire HTTP request in a plain text?

1

There are 1 best solutions below

8
On BEST ANSWER

You can use Fiddler (http://www.telerik.com/fiddler) to see your complete request/response in plain text and to test your REST API as well.

Also, you can use Wireshark (https://www.wireshark.org/) applying a HTTP filter.

My recommendation is Fiddler, I use it a lot to test and debug my REST API.

Hope this helps