[solved] PHP CURL hickup with HEAD request
| From: | B. Aerts | Date: | Tue, 27 Oct 2015 16:32:34 +0000 |
| Subject: | [solved] PHP CURL hickup with HEAD request | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-325228@lists.php.net to get a copy of this message | ||
found the solution in the mailing list on a related problem :
if ( strtolower($theMethod) === 'head')
// i.c.o. a HEAD request, specify no body is required.
// This will enfore the method to HEAD anyway - see PHP documentation
curl_setopt($ch, CURLOPT_NOBODY, TRUE ) ;
else if ( strlen($theBody) )
// if a body was specified, set it
curl_setopt($ch, CURLOPT_POSTFIELDS, $theBody) ;
On 18/10/15 11:45, B. Aerts wrote:
Dear list, I recently ran into a small hickup with the PHP CURL library. I use the library to perform a HTTP HEAD request, supposed to retrieve only the headers for a request. One of these headers is the "content-length" header - which returns the length of the file to be fetched. Since it is a HEAD request, there is no response body returned - making the actual content-length 0 bytes. This yields a CURL error code 18, "partial file returned", while the call performs exactly as intended. Is there a switch I forgot to suppress this message ? The code I use is :$theMethod = "HEAD" ; $theUrl = "http://localhost/index.html" ; $theUsr = "user" ; $thePwd = "xxxxxxxx" ;$ch = curl_init() ;curl_setopt($ch, CURLOPT_URL, $theUrl) ; curl_setopt($ch, CURLOPT_USERAGENT, "PHP cURL Client" ) ;if (strlen($theUsr) || strlen($thePwd) ) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY ) ; curl_setopt($ch, CURLOPT_USERPWD, $theUsr . ":" . $thePwd ) ; }// no check on method required; will be done by server curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $theMethod);// if headers were supplied, format them so CURL understands them if (is_array($extraHeaders) && count($extraHeaders) ) { foreach ($extraHeaders AS $headerName => $headerValue) $curlHeaders[] = "$headerName: $headerValue";curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders ) ; }curl_setopt($ch, CURLOPT_TIMEOUT, 15 ) ; curl_setopt($ch, CURLOPT_VERBOSE, true ) ; curl_setopt($ch, CURLOPT_HEADER, true ) ; // keep return headers curl_setopt($ch, CURLINFO_HEADER_OUT, true ); // keeps response as string curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ) ; // follow redirects curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true ) ; // max. 5 redirects curl_setopt($ch, CURLOPT_MAXREDIRS, 5) ;if ( strlen($theBody) ) curl_setopt($ch, CURLOPT_POSTFIELDS, $theBody) ;// execute HTTP request $httpResponse = curl_exec($ch);// Check if any error occurred $errno = curl_errno($ch) ;Thanks in advance, Bert