cURL / Mailing Lists / curl-and-php / Single Mail

curl-and-php

RE: POST with HEAD?

From: Liu Shan Shui <me_at_lx.sg>
Date: Fri, 7 Aug 2009 16:13:26 +0800

Hi Daniel,

Thanks for your input. I did a little bit of Googling after you mentioned
callbacks, and found this:
http://sg.php.net/manual/en/function.curl-setopt.php#73742

Then I came up with the following code, which executes within a few seconds
(thereby showing that it didn't download the 1000 MB file):

<?php

$c = curl_init();
curl_setopt($c, CURLOPT_URL,
'http://speedtest.bbned.nl/download/file1000mb.bin');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, true);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'a=b&c=d');
curl_setopt($c, CURLOPT_WRITEFUNCTION, create_function('$c, $s', ''));
curl_exec($c);

header('Content-Type: text/plain');
var_dump(curl_getinfo($c));

?>

A few notes here: Curl_exec($c) returns FALSE probably because there's no
output, but the HTTP request is still sent accordingly. Setting
CURLOPT_HEADER to TRUE seems to make cURL to ignore even the response
headers (header_size becomes 0), and I'm guessing that it's because the
header output is handled by CURLOPT_WRITEFUNCTION together with the response
body instead of CURLOPT_HEADERFUNCTION.

With regards,
Liu Shan Shui
me_at_lx.sg
"Life would be much easier if I had the source code." - Anonymous

-----Original Message-----
From: curl-and-php-bounces_at_cool.haxx.se
[mailto:curl-and-php-bounces_at_cool.haxx.se] On Behalf Of Daniel Stenberg
Sent: Friday, August 07, 2009 2:59 PM
To: curl with PHP
Subject: Re: POST with HEAD?

On Fri, 7 Aug 2009, Stephen Pynenburg wrote:

> I encountered this behaviour a while ago - not sure why, but it seems
you're
> correct in saying that CURLOPT_POST and _NOBODY don't go together well.
The
> solution that worked for me was very simple: just use curl_setopt($ch,
> CURLOPT_CUSTOMREQUEST, "POST") instead of setting CURLOPT_POST.

Let me just warn you when doing this.

The NOBODY option implies a HEAD request when you do it with HTTP. A HEAD
request MUST NOT have a response body and thus libcurl will not read any
such.

A POST response almost always have a body, and you can tell libcurl to abort

the reading of that by returning something appropriate from a callback or
similar.

By using NOBODY but setting CUSTOMREQUEST to "POST", you're basically
telling
libcurl to do a HEAD but to replace the method name. This may work fine, but

you should then remember that libcurl will still internally work as if it is

indeed a HEAD request.

-- 
  / daniel.haxx.se
_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
Received on 2009-08-07