ФорумПрограммированиеПыхнуть хотите?Готовые решения → TRO HTTP Class

TRO HTTP Class

  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 29 сентября 2009 г. 13:26, спустя 16 дней 2 часа 21 минуту

    Мой HTTP класс .

    Описания класса, его функций и внутри-классовых переменных :

    Переменные :
    timeout - время тайм аута для запросов ( Стандартно : 30 ( int ) )
    user_agent - значения заголовка User-Agent в запросах ( Стандартно : FALSE ( bool ), что значит что этого заголовка в запросах вообще не будет )
    cookies - кукис заголовки в запросах ( идут в формате "имя_куки=его_значение;" ) ( Стандартно : FALSE ( bool ), что значит что этого заголовка в запросах вообще не будет )
    referer - значения заголовка Referer в запросах ( Стандартно : FALSE ( bool ), что значит что этого заголовка в запросах вообще не будет )
    proxy_host, proxy_port - хост и порт прокси через который будут идти запросы ( Стандартно : FALSE ( bool ), что значит что прокси выключен )

    Функции :
    get ($url ( string ), $avars ( array ), $headers ( array )) - запрос типа GET, $avars - данные запроса, $headers - дополнительные заголовки, возвращает ответ сервера на запрос.
    post ($url ( string ), $avars ( array ), $headers ( array )) - запрос типа POST, $avars - данные запроса ( без них функция не выполниться ), $headers - дополнительные заголовки, возвращает ответ сервера на запрос.
    post_file ($url ( string ), $avars ( array ), $headers ( array )) - запрос типа POST который в себе еще передает файл, $avars - данные запроса ( без них функция не выполниться ) ( должны идти массивом следущего типа :
    $avars['type'] => 'link' ( тип - ссылка на локальный файл для загрузки ( так как реализованно посредством функции file_get_contents можно попробовать и удаленные файлы)) || 'content' ( тип - содержимое )
    $avars['value'] => 'value' ( если тип - ссылка тогда здесь должна быть ссылка на файл, если же content то содержимое файла закодированое посредством функции base64_encode )
    $avars['filename'] => 'filename' ( имя файла в запросе )
    ), возвращает ответ сервера на запрос.
    generate_user_agent ($type ( string ), $random ( bool ), $uaid ( int )) - сгенерировать значение для внутри-классовой переменной user_agent, есть да типа для генерации или браузеры ( browser ) или боты ( bot ), $random будет случайно генерироваться или будет генерировать определенный юзер_агент, $uaid номер юзер_агента в массиве. ( Вот содержимое массива :
    if($type=='browser'){
    $user_agents = array(
    0 => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)",
    1 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    2 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    3 => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
    4 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)",
    5 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19) Gecko/20081201 Firefox/2.0.0.19",
    6 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19",
    7 => "Opera/9.50 (Windows NT 6.0; U; en)"
    );
    } elseif ($type=='bot'){
    $user_agents = array(
    0 => "Googlebot/2.1 (+http://www.google.com/bot.html)",
    1 => "Msnbot/1.0 (+http://search.msn.com/msnbot.htm)",
    3 => "Yandex/1.01.001 (compatible; Win16; I)",
    4 => "Mozilla/5.0 (compatible; Yahoo! Slurp China; [url="http://misc.yahoo.com.cn/help.html)""]http://misc.yahoo.com.cn/help.html)"
    );
    }
    )
    parse_redirect ($response) - поиск заголовка редиректа в ответе $response, если есть то возвращает его.
    parse_response ($response) - парсит ответ сервера, возвращает массив содержащий два элемента headers - заголовки сервера и html - данные отданные сервером
    parse_headers ($response) - парсит ответ сервера, возвращает массив содержащий заголовки ( соответственно каждый элемент массива одноименен с заголовком ) ( если ответ содержит несколько заголовков одного типа то он из этого элемента делает массив ) и также непосредственно первую стркоу ответа - Answer
    add_cookies ($response) - добавляет в внутри-классовую переменную значения заголовков полученных с ответа в формате "имя_куки=его_значение;"
    use_proxy ($proxy) - использовать прокси в запросах $proxy - стрка в формате ip:port например : use_proxy (127.0.0.1:8080)
    unuse_proxy - перестать использовать прокси в запросах
    url_exist - проверяет чтоб ответ сервера не соответствовал 404
    url_allowed - проверяет чтоб ответ сервера не соответствовал 403

    Исходный код с подсветкой синтаксиса ( настоятельно прошу нигде ничего не менять в ссорцах ) :
    http://www.pastebin.ru/303464
    http://belportal.info/paste/?show=226
    http://paste2.org/p/193181
    http://nopaste.info/660f8ce1db.html

    Исходный код :
    <?php

    class TRO_HTTP
    {

    var $timeout = 30;
    var $user_agent = FALSE;
    var $cookies = FALSE;
    var $referer = FALSE;
    var $proxy_host = FALSE;
    var $proxy_port = FALSE;

    function get ($url, $avars = FALSE, $headers = FALSE) {
    $parsed_url = parse_url($url);
    $host = $parsed_url['host'];
    $path = $parsed_url['path'];
    if(isset($parsed_url['query'])) {
    $query = $parsed_url['query'];
    }
    if( $this->proxy_host && $this->proxy_port ) {
    $socket = @fsockopen($this->proxy_host, $this->proxy_port, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    $i = 1;
    $acount = count($avars);
    if($avars){
    foreach ($avars As $name => $value) {
    if($i == $acount){
    $vars .= $name.'='.$value;
    } else {
    $vars .= $name.'='.$value.'&';
    }
    $i ++;
    }
    }
    if( $vars && isset($query)){
    $out = "GET http://".$host.$path."?".$query."&".$vars." HTTP/1.1\r\n";
    } elseif ( $vars ) {
    $out = "GET http://".$host.$path."?".$vars." HTTP/1.1\r\n";
    } elseif ( isset($query) ) {
    $out = "GET http://".$host.$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "GET http://".$host.$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$this->proxy_host."\r\n";
    } else {
    $socket = @fsockopen($host, 80, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    $i = 1;
    $acount = count($avars);
    if($avars){
    foreach ($avars As $name => $value) {
    if($i == $acount){
    $vars .= $name.'='.$value;
    } else {
    $vars .= $name.'='.$value.'&';
    }
    $i ++;
    }
    }
    if( $vars && isset($query)){
    $out = "GET ".$path."?".$query."&".$vars." HTTP/1.1\r\n";
    } elseif ( $vars != NULL ) {
    $out = "GET ".$path."?".$vars." HTTP/1.1\r\n";
    } elseif ( isset($query) ) {
    $out = "GET ".$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "GET ".$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$host."\r\n";
    }
    if( $this->user_agent ) {
    $out .= "User-Agent: ".$this->user_agent."\r\n";
    }
    if( $headers ) {
    foreach ($headers as $header => $value) {
    $out .= $header.": ".$value."\r\n";
    }
    }
    if( $this->cookies  ) {
    $out .= "Cookie: ".$this->cookies."\r\n";
    }
    if( $this->referer  ) {
    $out .= "Referer: ".$this->referer."\r\n";
    }
    if(!isset($headers['Connection'])) {
    $out .= "Connection: Close\r\n";
    }
    $out .= "\r\n";
    fwrite($socket, $out);
    while (!feof($socket)) {
    $in .= fread($socket, 128);
    }  
    fclose($socket);
    return $in;
    }

    function post ($url, $avars, $headers = FALSE) {
    $parsed_url = parse_url($url);
    $host = $parsed_url['host'];
    $path = $parsed_url['path'];
    if(isset($parsed_url['query'])) {
    $query = $parsed_url['query'];
    }
    if( $this->proxy_host && $this->proxy_port ) {
    $socket = @fsockopen($this->proxy_host, $this->proxy_port, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    if ( isset($query) ) {
    $out = "POST http://".$host.$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "POST http://".$host.$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$this->proxy_host."\r\n";
    } else {
    $socket = @fsockopen($host, 80, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    if ( isset($query) ) {
    $out = "POST ".$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "POST ".$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$host."\r\n";
    }
    $i = 1;
    $acount = count($avars);
    foreach ($avars As $name => $value) {
    if($i == $acount){
    $vars .= $name.'='.$value;
    } else {
    $vars .= $name.'='.$value.'&';
    }
    $i ++;
    }
    if( $this->user_agent ) {
    $out .= "User-Agent: ".$this->user_agent."\r\n";
    }
    if( $headers ) {
    foreach ($headers as $header => $value) {
    $out .= $header.": ".$value."\r\n";
    }
    }
    if( $this->cookies ) {
    $out .= "Cookie: ".$this->cookies."\r\n";
    }
    if( $this->referer ) {
    $out .= "Referer: ".$this->referer."\r\n";
    }
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out .= "Content-Length: ".strlen($vars)."\r\n";
    if(!isset($headers['Connection'])) {
    $out .= "Connection: Close\r\n";
    }
    $out .= "\r\n";
    $out .= $vars;
    fwrite($socket, $out);
    while (!feof($socket)) {
    $in .= fgets($socket, 128);
    }  
    fclose($socket);
    return $in;
    }

    function post_file ($url, $avars, $headers = FALSE) {
    $parsed_url = parse_url($url);
    $host = $parsed_url['host'];
    $path = $parsed_url['path'];
    if(!$avars){
    die('Вы хотите сделать запрос который требует данные.');
    }
    if($avars['type'] == 'content'){
    $file .= "filename=".$avars['filename']."&content=".$avars['value'];
    }
    if($avars['type'] == 'link'){
    $filetemp = file_get_contents($avars['value']);
    $filetopost = base64_encode($filetemp);
    $file .= "filename=".$avars['filename']."&content=".$filetopost;
    }
    if(isset($parsed_url['query'])) {
    $query = $parsed_url['query'];
    }
    if( $this->proxy_host && $this->proxy_port ) {
    $socket = @fsockopen($this->proxy_host, $this->proxy_port, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    if ( isset($query) ) {
    $out = "POST http://".$host.$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "POST http://".$host.$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$this->proxy_host."\r\n";
    } else {
    $socket = @fsockopen($host, 80, $errno, $errstr, $this->timeout) or die ("Не могу открыть сокет :".$errstr."(".$errno.")");
    if ( isset($query) ) {
    $out = "POST ".$path."?".$query." HTTP/1.1\r\n";
    } else {
    $out = "POST ".$path." HTTP/1.1\r\n";
    }
    $out .= "Host: ".$host."\r\n";
    }
    if( $this->user_agent ) {
    $out .= "User-Agent: ".$this->user_agent."\r\n";
    }
    if( $headers ) {
    foreach ($headers as $header => $value) {
    $out .= $header.": ".$value."\r\n";
    }
    }
    if( $this->cookies ) {
    $out .= "Cookie: ".$this->cookies."\r\n";
    }
    if( $this->referer ) {
    $out .= "Referer: ".$this->referer."\r\n";
    }
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out .= "Content-Length: ".strlen($file)."\r\n";
    if(!isset($headers['Connection'])) {
    $out .= "Connection: Close\r\n";
    }
    $out .= "\r\n";
    $out .= $file;
    fwrite($socket, $out);
    while (!feof($socket)) {
    $in .= fgets($socket, 128);
    }  
    fclose($socket);
    return $in;
    }

    function generate_user_agent ($type = 'browser', $random = TRUE, $uaid = 1) {
    if($random){
    if($type=='browser'){
    $user_agents = array(
    0 => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)",
    1 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    2 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    3 => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
    4 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)",
    5 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19) Gecko/20081201 Firefox/2.0.0.19",
    6 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19",
    7 => "Opera/9.50 (Windows NT 6.0; U; en)"
    );
    } elseif ($type=='bot'){
    $user_agents = array(
    0 => "Googlebot/2.1 (+http://www.google.com/bot.html)",
    1 => "Msnbot/1.0 (+http://search.msn.com/msnbot.htm)",
    3 => "Yandex/1.01.001 (compatible; Win16; I)",
    4 => "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)"
    );
    }
    $user_agent = $user_agents[rand(0,count($user_agents))];
    } else {
    if($type=='browser'){
    $user_agents = array(
    0 => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)",
    1 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    2 => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    3 => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
    4 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)",
    5 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19) Gecko/20081201 Firefox/2.0.0.19",
    6 => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19",
    7 => "Opera/9.50 (Windows NT 6.0; U; en)"
    );
    } elseif ($type=='bot'){
    $user_agents = array(
    0 => "Googlebot/2.1 (+http://www.google.com/bot.html)",
    1 => "Msnbot/1.0 (+http://search.msn.com/msnbot.htm)",
    3 => "Yandex/1.01.001 (compatible; Win16; I)",
    4 => "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)"
    );
    }
    $user_agent = $user_agents[$uaid];
    }
    return $user_agent;
    }

    function parse_redirect ($response) {
    $parsed = $this->parse_response($response);
    $headers = $this->parse_headers($parsed['headers'], 1);
    if(isset($headers['Location'])){
    $redirect = $headers['Location'];
    } else {
    echo ('В ответе нету заголовков для установки Cookie файлов.');
    }
    return $redirect;
    }

    function parse_response ($response) {
    $temp = explode("\r\n\r\n",$response);
    $parsed['headers'] = $temp[0];
    $parsed['html'] = str_replace($parsed['headers'], '', $response);
    return $parsed;
    }

    function parse_headers ($headers, $format = 0) {
    $temp = explode("\r\n",$headers['headers']);
    if($format == 1) {
    $parsed['Answer'] = $temp[0];
    $i = 1;
    while (isset($temp[$i])) {
    $tempto = explode(": ",$temp[$i]);
    $name = $tempto[0];
    $value = $tempto[1];
    if(isset($parsed[$name])){
    if(is_array($parsed[$name])){
    array_push($parsed[$name],$value);
    } else {
    $old = $parsed[$name];
    $parsed[$name] = array($old, $value);  
    }
    } else {
    $parsed[$name] = $value;
    }
    $i++;
    }
    } else {
    $parsed = $temp;
    }
    return $parsed;
    }

    function add_cookies ($response) {
    $this->cookies = '';
    $parsed = $this->parse_response($response);
    $headers = $this->parse_headers($parsed, 1);
    if($headers['Set-Cookie']){
    if(is_array($headers['Set-Cookie'])) {
    foreach ($headers['Set-Cookie'] As $Nom => $Valu) {
    $tempto = explode(";", $Valu);
    $this->cookies .= $tempto[0]."; ";
    }
    } else {
    $tempto = explode(";", $headers['Set-Cookie']);
    $this->cookies .= $tempto[0]."; ";
    }
    }
    }

    function use_proxy ($proxy) {
    $temp = explode(":",$proxy);
    $this->proxy_host = $temp[0];
    $this->proxy_port = $temp[1];
    }

    function unuse_proxy () {
    $this->proxy_host = FALSE;
    $this->proxy_port = FALSE;
    }

    function url_exist ($url) {
    $headas = @get_headers($url);
    if(!substr($headas[0],9,3)=="404"){
    return false;
    } else {
    return true;
    }
    }

    function url_allowed ($url) {
    $headas = @get_headers($url);
    if(!substr($headas[0],9,3)=="403"){
    return false;
    } else {
    return true;
    }
    }

    }

    ?>


    Писал дето пол-года - год назад … ща многое переделал бы но увы нима время)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 3:42, спустя 14 часов 15 минут 58 секунд

    пиздец ужас.

    http://pyha.ru/forum/topic/2493.0
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 3:44, спустя 2 минуты 30 секунд

    а чо ужс ? зато опыт какой (: и знание протокола HTTP наизусть ((:
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 3:45, спустя 1 минуту 11 секунд


    а чо ужс ? зато опыт какой (: и знание протокола HTTP наизусть ((:
    а чо смайлы грустные? не нравится - не ешь
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 3:46, спустя 59 секунд

    смайлы не грустные а реверсные))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 3:49, спустя 2 минуты 42 секунды

    посмотри ссылочку мою
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 3:51, спустя 1 минуту 27 секунд

    там 504 (: всм на сайте твоем непосредстно :(
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 3:52, спустя 1 минуту 35 секунд

    не компильте апач …

    http://easycaptures.com/0822219054
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 3:54, спустя 2 минуты 11 секунд

    что значит не компильте ?))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 4:02, спустя 7 минут 19 секунд


    что значит не компильте ?))
    это и значит …
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 4:14, спустя 12 минут 33 секунды

    как я его могу компилировать ? У мя чо есть доступ к шеллу ?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 4:18, спустя 3 минуты 52 секунды

    про сам класс ничего не скажу, а подача материала не понравилась. много текста и по сути просто цитирование исходников.
    в посте нет ничего что бы облегчило понимание. чем это лучше, чем просто дать ссылку?
    кстати pastebin мне не показал ничего, ссылка сдохла?
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 4:17, спустя 23 часа 59 минут 9 секунд


    как я его могу компилировать ? У мя чо есть доступ к шеллу ?
    ну у меня есть доступ вот я и перекомпилирую)
    Сапожник без сапог
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 4:22, спустя 4 минуты 54 секунды

    xD паделись доступом, йа тож покомпилирую чота)) пять носков например :D
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 сентября 2009 г. 4:33, спустя 10 минут 58 секунд

    временно поднял сайты, заебало)
    Спустя 59 сек.
    никто из местных не поднимал apach22 + fcgid + suexec + php ?

    у меня прекрасно работат apache22 + fcgid + php, когда добавляю suexec нихуя не пашет, и 255 ошибка …. ХУЙ ЗНАЕТ ПОЧЕМУ ..
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!