note 71532 added to function.fsockopen
| From: | php-general at lists dot php dot net | Date: | Mon, 04 Dec 2006 16:34:58 +0000 |
| Subject: | note 71532 added to function.fsockopen | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-120273@lists.php.net to get a copy of this message | ||
I've had issues with some of the handlers for chunked http 1.1 responses. Here's a method
that worked for me, if it works for you as well, then cheers :P
<?php
function httpSocketConnection($host, $method, $path, $data)
{
$method = strtoupper($method);
if ($method == "GET")
{
$path.= '?'.$data;
}
$filePointer = fsockopen($host, 80, $errorNumber, $errorString);
if (!$filePointer)
{
logEvent('debug', 'Failed opening http socket connection:
'.$errorString.' ('.$errorNumber.')<br/>\n');
return false;
}
$requestHeader = $method." ".$path." HTTP/1.1\r\n";
$requestHeader.= "Host: ".$host."\r\n";
$requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1)
Gecko/20061010 Firefox/2.0\r\n";
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
if ($method == "POST")
{
$requestHeader.= "Content-Length: ".strlen($data)."\r\n";
}
$requestHeader.= "Connection: close\r\n\r\n";
if ($method == "POST")
{
$requestHeader.= $data;
}
fwrite($filePointer, $requestHeader);
$responseHeader = '';
$responseContent = '';
do
{
$responseHeader.= fread($filePointer, 1);
}
while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader));
if (!strstr($responseHeader, "Transfer-Encoding: chunked"))
{
while (!feof($filePointer))
{
$responseContent.= fgets($filePointer, 128);
}
}
else
{
while ($chunk_length = hexdec(fgets($filePointer)))
{
$responseContentChunk = '';
logEventToTextFile('debug', $chunk_length);
$read_length = 0;
while ($read_length < $chunk_length)
{
$responseContentChunk .= fread($filePointer, $chunk_length - $read_length);
$read_length = strlen($responseContentChunk);
}
$responseContent.= $responseContentChunk;
fgets($filePointer);
}
}
logEventToTextFile('debug', $responseContent);
return chop($responseContent);
}
?>
----
Server IP: 66.163.161.117
Probable Submitter: 74.109.89.230
----
Manual Page -- http://www.php.net/manual/en/function.fsockopen.php
Edit -- https://master.php.net/note/edit/71532
Del: integrated -- https://master.php.net/note/delete/71532/integrated
Del: useless -- https://master.php.net/note/delete/71532/useless
Del: bad code -- https://master.php.net/note/delete/71532/bad+code
Del: spam -- https://master.php.net/note/delete/71532/spam
Del: non-english -- https://master.php.net/note/delete/71532/non-english
Del: in docs -- https://master.php.net/note/delete/71532/in+docs
Del: other reasons-- https://master.php.net/note/delete/71532
Reject -- https://master.php.net/note/reject/71532
Search -- https://master.php.net/manage/user-notes.php