<?php
class Request
{
var $_fp;
var $_url;
var $_host;
var $_protocol;
var $_uri;
var $_port;
private function _scan_url()
{
$req = $this->_url;
if($pos === false)
{
}
$host = substr($req, 0, $pos); if(strpos($host, ':') !== false) {
list($this->_host
, $this->_port
) = explode(':', $host); }
else
{
$this->_host = $host;
$this->_port = ($this->_protocol == 'https') ? 443 : 80;
}
$this->_uri
= substr($req, $pos); if($this->_uri == '')
{
$this->_uri = '/';
}
}
//constructor
function Request($url)
{
$this->_url = $url;
$this->_scan_url();
}
//download URL to string
function DownloadToString()
{
$crlf = "\r\n";
//generate request
$response = '';
$req = 'GET '.$this->_uri.' HTTP/1.0'.$crlf. 'Host: '.$this->_host.$crlf.
'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7'.$crlf.$crlf;
$this->_fp
= fsockopen(($this->_protocol
== 'https' ?
'ssl://' : '') . $this->_host
, $this->_port
); {
$response .= fread($this->_fp
, 1024); }
//split header and body
$pos = strpos($response, $crlf.$crlf); if($pos === false)
{
return $response;
}
$header = substr($response, 0, $pos); //parse headers
foreach($lines as $line)
{
if(($pos = strpos($line, ':')) !== false) {
}
}
//redirection
if(isset($headers['location'])) {
$http = new HTTPRequest($headers['location']);
return($http->DownloadToString($http));
}
return $body;
}
function DownloadHeadersOnly()
{
$crlf = "\r\n";
//generate request
$response = '';
$req = 'GET '.$this->_uri.' HTTP/1.0'.$crlf.'Host: '.$this->_host.$crlf.$crlf;
$this->_fp
= fsockopen(($this->_protocol
== 'https' ?
'ssl://' : '') . $this->_host
, $this->_port
); {
$response .= fread($this->_fp
, 1024); }
//split header and body
$pos = strpos($response, $crlf.$crlf); if($pos === false)
{
return $response;
}
$header = substr($response, 0, $pos); foreach($lines as $line)
{
if(($pos = strpos($line, ':')) !== false) {
}
}
return $headers;
}
}
?>
PD9waHAKCWNsYXNzIFJlcXVlc3QKCXsKCQl2YXIgJF9mcDsKCQl2YXIgJF91cmw7CgkJdmFyICRfaG9zdDsKCQl2YXIgJF9wcm90b2NvbDsKCQl2YXIgJF91cmk7CgkJdmFyICRfcG9ydDsKCgkJcHJpdmF0ZSBmdW5jdGlvbiBfc2Nhbl91cmwoKQoJCXsKCQkJJHJlcSA9ICR0aGlzLT5fdXJsOwoJCQkkcG9zID0gc3RycG9zKCRyZXEsICc6Ly8nKTsKCQkJJHRoaXMtPl9wcm90b2NvbCA9IHN0cnRvbG93ZXIoc3Vic3RyKCRyZXEsIDAsICRwb3MpKTsKCQkJJHJlcSA9IHN1YnN0cigkcmVxLCAkcG9zKzMpOwoJCQkkcG9zID0gc3RycG9zKCRyZXEsICcvJyk7CgkJCWlmKCRwb3MgPT09IGZhbHNlKQoJCQl7CgkJCQkkcG9zID0gc3RybGVuKCRyZXEpOwoJCQl9CgkJCSRob3N0ID0gc3Vic3RyKCRyZXEsIDAsICRwb3MpOwoJCQlpZihzdHJwb3MoJGhvc3QsICc6JykgIT09IGZhbHNlKQoJCQl7CgkJCQlsaXN0KCR0aGlzLT5faG9zdCwgJHRoaXMtPl9wb3J0KSA9IGV4cGxvZGUoJzonLCAkaG9zdCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+X2hvc3QgPSAkaG9zdDsKCQkJCSR0aGlzLT5fcG9ydCA9ICgkdGhpcy0+X3Byb3RvY29sID09ICdodHRwcycpID8gNDQzIDogODA7CgkJCX0KCQkJJHRoaXMtPl91cmkgPSBzdWJzdHIoJHJlcSwgJHBvcyk7CgkJCWlmKCR0aGlzLT5fdXJpID09ICcnKQoJCQl7CgkJCQkkdGhpcy0+X3VyaSA9ICcvJzsKCQkJfQoJCX0KCgkJLy9jb25zdHJ1Y3RvcgoJCWZ1bmN0aW9uIFJlcXVlc3QoJHVybCkKCQl7CgkJCSR0aGlzLT5fdXJsID0gJHVybDsKCQkJJHRoaXMtPl9zY2FuX3VybCgpOwoJCX0KCgkJLy9kb3dubG9hZCBVUkwgdG8gc3RyaW5nCgkJZnVuY3Rpb24gRG93bmxvYWRUb1N0cmluZygpCgkJewoJCQkkY3JsZiA9ICJcclxuIjsKCQkJLy9nZW5lcmF0ZSByZXF1ZXN0CgkJCSRyZXNwb25zZSA9ICcnOwoJCQkkcmVxID0gJ0dFVCAnLiR0aGlzLT5fdXJpLicgSFRUUC8xLjAnLiRjcmxmLiAnSG9zdDogJy4kdGhpcy0+X2hvc3QuJGNybGYuCgkJCQknVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4wKSBBcHBsZVdlYktpdC81MzUuNyAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xNi4wLjkxMi43NSBTYWZhcmkvNTM1LjcnLiRjcmxmLiRjcmxmOwoJCQkkdGhpcy0+X2ZwID0gZnNvY2tvcGVuKCgkdGhpcy0+X3Byb3RvY29sID09ICdodHRwcycgPyAnc3NsOi8vJyA6ICcnKSAuICR0aGlzLT5faG9zdCwgJHRoaXMtPl9wb3J0KTsKCQkJZndyaXRlKCR0aGlzLT5fZnAsICRyZXEpOwoJCQl3aGlsZShpc19yZXNvdXJjZSgkdGhpcy0+X2ZwKSAmJiAkdGhpcy0+X2ZwICYmICFmZW9mKCR0aGlzLT5fZnApKQoJCQl7CgkJCQkkcmVzcG9uc2UgLj0gZnJlYWQoJHRoaXMtPl9mcCwgMTAyNCk7CgkJCX0KCQkJZmNsb3NlKCR0aGlzLT5fZnApOwoJCQkvL3NwbGl0IGhlYWRlciBhbmQgYm9keQoJCQkkcG9zID0gc3RycG9zKCRyZXNwb25zZSwgJGNybGYuJGNybGYpOwoJCQlpZigkcG9zID09PSBmYWxzZSkKCQkJewoJCQkJcmV0dXJuICRyZXNwb25zZTsKCQkJfQoJCQkkaGVhZGVyID0gc3Vic3RyKCRyZXNwb25zZSwgMCwgJHBvcyk7CgkJCSRib2R5ID0gc3Vic3RyKCRyZXNwb25zZSwgJHBvcyArIDIqc3RybGVuKCRjcmxmKSk7CgkJCS8vcGFyc2UgaGVhZGVycwoJCQkkaGVhZGVycyA9IGFycmF5KCk7CgkJCSRsaW5lcyA9IGV4cGxvZGUoJGNybGYsICRoZWFkZXIpOwoJCQlmb3JlYWNoKCRsaW5lcyBhcyAkbGluZSkKCQkJewoJCQkJaWYoKCRwb3MgPSBzdHJwb3MoJGxpbmUsICc6JykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKHRyaW0oc3Vic3RyKCRsaW5lLCAwLCAkcG9zKSkpXSA9IHRyaW0oc3Vic3RyKCRsaW5lLCAkcG9zKzEpKTsKCQkJCX0KCQkJfQoJCQkvL3JlZGlyZWN0aW9uCgkJCWlmKGlzc2V0KCRoZWFkZXJzWydsb2NhdGlvbiddKSkKCQkJewoJCQkJJGh0dHAgPSBuZXcgSFRUUFJlcXVlc3QoJGhlYWRlcnNbJ2xvY2F0aW9uJ10pOwoJCQkJcmV0dXJuKCRodHRwLT5Eb3dubG9hZFRvU3RyaW5nKCRodHRwKSk7CgkJCX0KCQkJcmV0dXJuICRib2R5OwoJCX0KCgkJZnVuY3Rpb24gRG93bmxvYWRIZWFkZXJzT25seSgpCgkJewoJCQkkY3JsZiA9ICJcclxuIjsKCQkJLy9nZW5lcmF0ZSByZXF1ZXN0CgkJCSRyZXNwb25zZSA9ICcnOwoJCQkkcmVxID0gJ0dFVCAnLiR0aGlzLT5fdXJpLicgSFRUUC8xLjAnLiRjcmxmLidIb3N0OiAnLiR0aGlzLT5faG9zdC4kY3JsZi4kY3JsZjsKCQkJJHRoaXMtPl9mcCA9IGZzb2Nrb3BlbigoJHRoaXMtPl9wcm90b2NvbCA9PSAnaHR0cHMnID8gJ3NzbDovLycgOiAnJykgLiAkdGhpcy0+X2hvc3QsICR0aGlzLT5fcG9ydCk7CgkJCWZ3cml0ZSgkdGhpcy0+X2ZwLCAkcmVxKTsKCQkJd2hpbGUoaXNfcmVzb3VyY2UoJHRoaXMtPl9mcCkgJiYgJHRoaXMtPl9mcCAmJiAhZmVvZigkdGhpcy0+X2ZwKSkKCQkJewoJCQkJJHJlc3BvbnNlIC49IGZyZWFkKCR0aGlzLT5fZnAsIDEwMjQpOwoJCQl9CgkJCWZjbG9zZSgkdGhpcy0+X2ZwKTsKCQkJLy9zcGxpdCBoZWFkZXIgYW5kIGJvZHkKCQkJJHBvcyA9IHN0cnBvcygkcmVzcG9uc2UsICRjcmxmLiRjcmxmKTsKCQkJaWYoJHBvcyA9PT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiAkcmVzcG9uc2U7CgkJCX0KCQkJJGhlYWRlciA9IHN1YnN0cigkcmVzcG9uc2UsIDAsICRwb3MpOwoJCQkkYm9keSA9IHN1YnN0cigkcmVzcG9uc2UsICRwb3MgKyAyKnN0cmxlbigkY3JsZikpOwoJCQkkaGVhZGVycyA9IGFycmF5KCk7CgkJCSRsaW5lcyA9IGV4cGxvZGUoJGNybGYsICRoZWFkZXIpOwoJCQlmb3JlYWNoKCRsaW5lcyBhcyAkbGluZSkKCQkJewoJCQkJaWYoKCRwb3MgPSBzdHJwb3MoJGxpbmUsICc6JykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKHRyaW0oc3Vic3RyKCRsaW5lLCAwLCAkcG9zKSkpXSA9IHRyaW0oc3Vic3RyKCRsaW5lLCAkcG9zKzEpKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGhlYWRlcnM7CgkJfQoJfQo/Pg==