Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить контент страницы с помощью POST запроса, для дальнейшего парсинга 
:(
    Опции темы
voidman
Дата 21.4.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



На форуме где-то нашел функцию, которая отлично справляется со своей задачей c помощью GET запроса (спасибо разраьотчику).

Код

function urlGetContents($url, $timeout = 5)
{
         
   $url_parsed = parse_url($url);
   $host = $url_parsed["host"];
   if ($url == '' || $host == '') {
       return false;
   }
   $hostName = gethostbyname($host);
   $ip = ip2long($hostName);
   if ($ip === -1 || $ip === false) {
        return false;
   }
   $port = ($url_parsed["port"] == 0 ? 80 : $url_parsed["port"]);
   $path = (empty($url_parsed["path"]) ? '/' : $url_parsed["path"]);
   $path.= (!empty($url_parsed["query"]) ? '?'.$url_parsed["query"] : '');
   $out = "GET $path HTTP/1.0\r\nHost: $host\r\nConnection: Close\r\n\r\n";
   $fp = fsockopen($host, $port, $errno, $errstr, intval($timeout));
   if (!$fp) {
       return false;
   }
   stream_set_timeout($fp, intval($timeout));
   fwrite($fp, $out);
   $headers = '';
   $content = '';
   $buf = '';
   $isBody = false;
   while (!feof($fp)) {
        $buf = fgets($fp, 1024);
        if ($isBody) {
            $content .= $buf;
        } else {
            $headers .= $buf;
        }
        if ($buf == "\r\n" ) {
            $isBody = true;
        }
   }
   preg_match('#HTTP/1.[0-9]{1}\s+([0-9]{3}).*#is', $headers, $match);
   fclose($fp);
   if($match[1] != 200) {
       return false;
   }

   return array('headers'=>$headers,'body'=>$content);
}


Подскажите, как можно ее модифицировать (или разрабоать новую) для POST запроса?

П.С. К сожалению cURL недоступен на моем хостинге, поэтому не выссказывайтесь в его пользу в данном посте, пожалуйста.

Спасибо за ваши ответы!
PM MAIL   Вверх
awers
Дата 22.4.2008, 04:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Конечно можно! Самый прямой способ - это перелезть на curl
PM MAIL WWW ICQ Skype   Вверх
voidman
Дата 22.4.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Цитата

Конечно можно! Самый прямой способ - это перелезть на curl 


Раз уж Вы не обратили внимание на мой П.С., то скажите, где можно найти отдельный класс сURL-а, дабы не смотря на политику моего хостера, использовать эту полезную библиотеку, просто подключив ее как обычный файл.

Спасибо
PM MAIL   Вверх
Fortop
Дата 22.4.2008, 12:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Можешь разобраться в протоколе HTTP и тем же самым механизмом как и выше (через сокеты) формировать POST


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
awers
Дата 22.4.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



voidman, что то подобное видел не phpclasses
PM MAIL WWW ICQ Skype   Вверх
voidman
Дата 22.4.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Если кому надо, вот нашел альтернативу для ПОСТА:

Код

  function do_post_request($url, $data, $optional_headers = null)
  {
     $params = array('http' => array(
                  'method' => 'POST',
                  'content' => $data
               ));
     if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
     }
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
     }
     $response = @stream_get_contents($fp);
     if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
     }
     return $response;
  }


параметры даты задавать удобно так:
Код

$data = array('name'=>'some_name',
             'pass'=>'password'
             );
              
$data = http_build_query($data);


Не совсем то, но пока сойдет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.