How can I see the request headers made by curl when sending a request to the server? How can I see the request headers made by curl when sending a request to the server? curl curl

How can I see the request headers made by curl when sending a request to the server?


I think curl --verbose/-v is the easiest. It will spit out the request headers (lines prefixed with '>') without having to write to a file:

$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/* About to connect() to stackoverflow.com port 80 (#0)*   Trying 69.59.196.211... connected* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)> HEAD / HTTP/1.1> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS> Host: stackoverflow.com> Accept: */*> Testing: Test header so you see this works>< HTTP/1.0 200 OK...


The question did not specify if command line command named curl was meant or the whole cURL library.

The following PHP code using cURL library uses first parameter as HTTP method (e.g. "GET", "POST", "OPTIONS") and second parameter as URL.

<?php$ch = curl_init();$f = tmpfile(); # will be automatically removed after fclose()curl_setopt_array($ch, array(    CURLOPT_CUSTOMREQUEST  => $argv[1],    CURLOPT_URL            => $argv[2],     CURLOPT_RETURNTRANSFER => 1,    CURLOPT_FOLLOWLOCATION => 0,    CURLOPT_VERBOSE        => 1,    CURLOPT_HEADER         => 0,    CURLOPT_CONNECTTIMEOUT => 5,    CURLOPT_TIMEOUT        => 30,    CURLOPT_STDERR         => $f,));$response = curl_exec($ch);fseek($f, 0);echo fread($f, 32*1024); # output up to 32 KB cURL verbose logfclose($f);curl_close($ch);echo $response;

Example usage:

php curl-test.php OPTIONS https://google.com

Note that the results are nearly identical to following command line

curl -v -s -o - -X OPTIONS https://google.com


The --trace-ascii option to curl will show the request headers, as well as the response headers and response body.

For example, the command

curl --trace-ascii curl.trace http://www.google.com/ 

produces a file curl.trace that starts as follows:

== Info: About to connect() to www.google.com port 80 (#0)== Info:   Trying 209.85.229.104... == Info: connected== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)=> Send header, 145 bytes (0x91)0000: GET / HTTP/1.10010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.30050:  OpenSSL/0.9.7l zlib/1.2.3006c: Host: www.google.com0082: Accept: */*008f: 

It also got a response (a 302 response, to be precise but irrelevant) which was logged.


If you only want to save the response headers, use the --dump-header option:

curl -D file urlcurl --dump-header file url

If you need more information about the options available, use curl --help | less (it produces a couple hundred lines of output but mentions a lot of options). Or find the manual page where there is more explanation of what the options mean.