PHP → Как сделать HTTP-запрос в скрипте
В PHP скриптах, очень часто используется обращение к другим сайтам путем HTTP-запроса. Мне известны несколько способов реализации таких запросов.
Описание используемых методов поверхностное - более полную информацию сможете получить перейдя по ссылкам в статье.
1. Самый простой, но не функциональный.
В качестве файла, в функции
Функция в основном используется для файлов, но её также можно применить и для загрузки веб-страниц.
Пример реализации:
$content = file_get_contents('http://ya.ru'); echo $content;
Недостаток этого способа в том, что запрос происходит только через методу GET и нет возможности указать таймаут.
2. Более сложный, но функциональный способ.
Для этого используются
Пример реализации:
$socket= fsockopen ("www.yandex.ru", 80, $errno, $errstr, 30); if (!$socket) {echo "$errstr ($errno)";} else { fputs ($socket, "GET / HTTP/1.0\r\nHost: www.yandex.ru\r\n\r\n"); while (!feof($socket)) {echo fgets ($socket,128);} fclose ($socket);}
Преимущество данного способа в том, что можно указать таймаут, метод запроса и полностью контролировать все отправляемые данные - заголовки, POST-данные и т.д.
3. Простой и функциональный способ.
Используя
Пример реализации:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://ya.ru'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content= curl_exec($ch); curl_close($ch); echo $content;
Способ наиболее простой, но требует библиотеку cURL - обычно она уже предустановлена на веб-сервере.
В своих скриптах я использую cURL, "завернутую" в функцию с уже предустановленными параметрами.
# setcurlcookie function setcurlcookie($setcookie) { global $cookie; if (!empty($setcookie)) {$cookie = $setcookie;}} # curl function curl($url, $post = '', $binary = 0) { global $cookie; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); if ($binary == 0) { curl_setopt($ch, CURLOPT_HEADER, 1);} else { curl_setopt($ch, CURLOPT_HEADER, 0);} curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_BINARYTRANSFER, $binary); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); return $result;}
Первая функция setcurlcookie() отвечает за сохранение куков в глобальную переменную.
Благодаря ей, при каждом следующем запросе, куки автоматически будут подставлены из предыдущего запроса.
Вторая функция curl() может осуществлять как GET запросы, так и POST. А также есть возможность указать тип получаемых данных - контент с заголовком или без.
Примеры:
GET-запрос:
$content = curl('http://ya.ru/?search=test'); echo $content;
POST-запрос:
$content = curl('http://ya.ru','username=alex&password=qwerty'); echo $content;
Загрузка файлов:
$content = curl('http://ya.ru/logo.png','',1); echo $content;
Примечание: Информация в статье не исчерпывающая - возможно есть и другие способы.
Похожие статьи:
Февраль 8th, 2011 at 09:24 #
file_get_contents может отправлять и post запросы.http://habrahabr.ru/blogs/php/48726/
Для этого нужно использовать менеджер контекста.
См. например мануал php или статью на хабре
GlooK
Февраль 8th, 2011 at 11:12 #
Прикольно, не знал. Спасибо)