|
|
Joined: Dec 1999
Posts: 30,867
Master Elite Member
|
HTTPRequest_GET() - Perform an HTTP GET request and return the body and headers.function HTTPRequest_GET($url, $Timeout = null) {
$r = array(
'status' => 0,
'errnum' => 0,
'errmsg' => '',
'headers' => array(),
'body' => ''
);
if (is_null($Timeout)) $Timeout = 15;
$ErrNum = 0; $ErrMsg = '';
$Request = $url;
$i = strpos($Request, '://');
$Protocol = strtolower(substr($Request, 0, $i));
$Request = substr($Request, $i + 3);
$i = strpos($Request, '/');
if($i === false) $i = strlen($Request);
$host_ = substr($Request, 0, $i);
if(strpos($host_, ':') !== false) list($Host, $Port) = explode(':', $host_);
else {
$Host = $host_;
$Port = ($Protocol == 'https') ? 443 : 80; }
$uri = substr($Request, $i);
if($uri == '') $uri = '/';
$Request =
"GET $uri HTTP/1.0\r\n" .
"Host: $Host\r\n" .
"\r\n";
$fp = @fsockopen(($Protocol == 'https' ? 'ssl://' : '') . $Host, $Port, $ErrNum, $ErrMsg, $Timeout);
if ($ErrNum != 0) {
$r['status'] = 1;
$r['errnum'] = $ErrNum;
$r['errmsg'] = $ErrMsg;
return $r;
}
fwrite($fp, $Request);
$response = '';
while(is_resource($fp) && $fp && !feof($fp)) $response .= fread($fp, 4096);
fclose($fp);
$i = strpos($response, "\r\n\r\n");
if($i === false) {
$r['body'] = $response;
return $r;
}
$header = substr($response, 0, $i);
$r['body'] = substr($response, $i + 4);
$lines = explode("\r\n", $header);
foreach($lines as $line)
if(($pos = strpos($line, ':')) !== false)
$r['headers'][strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos + 1));
if(isset($r['headers']['location'])) return HTTPRequest_GET($r['headers']['location'], $Timeout);
return $r;
}
Last edited by Russ; 03/14/14 09:07 PM.
|
|
|
|
|