Приднестровская поддержка XOOPS
Вместо перечисленных функций для получения информации из сети Интернет можно воспользоваться библиотекой CURL (Client URL Library). Чтобы использовать библиотеку CURL, необходимо в файле php.ini убрать символ комментария (;) перед строкой
;extension=php_curl.dll
В библиотеку CURL входят следующие функции:
□ curl_init([<URL-адрес>]) создает новый сеанс и возвращает идентификатор;
□ curl_close(<Идентификатор>) завершает сеанс;
□ curl_setopt(<Идентификатор>, <Параметр>, <Значение>) устанавливает параметры сеанса.
<Параметр> может равняться одной из следующих констант, определяющих смысл параметра <Значение>:
• CURLOPT_URL — URL-адрес;
• CURLOPT_PORT — номер порта;
• CURLOPT_USERAGENT — значение HTTP-заголовка User-Agent;
• CURLOPT_RETURNTRANSFER — если параметр не равен 0, то функция curl_exec() будет возвращать результат, а не выводить его сразу в Web-браузер;
• CURLOPT_TIMEOUT — максимальное время выполнения операции (в секундах);
• CURLOPT_HEADER — если параметр не равен 0, то результат будет включать не только содержимое документа, но и заголовки ответа сервера;
• CURLOPT_NOBODY — если параметр не равен 0, то результат будет включать только заголовки ответа сервера;
• CURLOPT_POST — если параметр не равен 0, то запрос будет оправлен методом POST. Кроме того, будет добавлен HTTP-заголовок Content-Type со значением application/x-www-form-urlencoded. Этот заголовок обычно используется при передаче данных формы;
• CURLOPT_POSTFIELDS — строка, содержащая данные для передачи методом POST;
• CURLOPT_REFERER — значение HTTP-заголовка Referer;
• CURLOPT_COOKIE — значение HTTP-заголовка Cookie;
• CURLOPT_FOLLOWLOCATION — если параметр не равен 0, то перенаправления будут обрабатываться автоматически;
• CURLOPT_HTTPHEADER — массив с дополнительными HTTP-заголовками;
• CURLOPT_FILE — дескриптор файла, в который будет выведен результат операции;
• CURLOPT_WRITEHEADER — дескриптор файла, в который будут выведены полученные заголовки;
• CURLOPT_STDERR — дескриптор файла, в который будут выводиться сообщения об ошибках;
□ curl_exec(<Идентификатор>) выполняет запрос;
□ curl_getinfo(<Идентификатор>, [<Параметр>]) возвращает информацию о последней операции. Если <Параметр> не указан, то функция возвращает ассоциативный массив. Если <Параметр> равен
CURLINFO_HTTP_CODE, то функция возвращает последний полученный код HTTP. Если <Параметр> равен CURLINFO_CONTENT_TYPE, то функция возвращает содержимое полученного заголовка Content-Type или значение NULL, если заголовка нет в ответе сервера;
□ curl_errno(<Идентификатор>) возвращает код последней ошибки;
□ curl_error(<Идентификатор>) позволяет получить строку с описанием последней ошибки.
Пример запроса методом GET с получением содержимого документа и всех заголовков ответа сервера приведен в листинге 54.
Листинг 54. Получение документа методом GET с использованием библиотеки CURL
<?php
$url = "http://wwwadmin.ru/testrobots.php?var1=1&var2=5&var3=45";
@$curl=curl_init();
if (!curl_errno($curl)) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, "MySpider/1.0");
curl_setopt($curl, CURLOPT_HEADER, 1);
$headers = array(
"Accept: text/html, text/plain, application/xml",
"Accept-Language: ru, ru-RU",
"Accept-Charset: windows-1251",
"Accept-Encoding: identity",
"Connection: close",
"Cookie: test=5"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl);
if (!curl_errno($curl)) {
echo "<b>Код возврата:</b> ";
echo curl_getinfo($curl, CURLINFO_HTTP_CODE);
echo "<br><b>Заголовок Content-Type:</b> ";
echo curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
echo "<br><br>";
echo "<b>Содержимое страницы:</b><br><br>";
echo "<pre>" . htmlspecialchars($content) . "</pre>";
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
curl_close($curl);
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
?>
В ряде случаев достаточно получить только заголовки ответа сервера (листинг 55).
Листинг 55. Получение заголовков ответа с использованием библиотеки CURL
<?php
$url = "http://wwwadmin.ru/testrobots.php?var1=1&var2=5&var3=45";
@$curl=curl_init();
if (!curl_errno($curl)) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, "MySpider/1.0");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_NOBODY, 1);
$headers = array(
"Accept: text/html, text/plain, application/xml",
"Accept-Language: ru, ru-RU",
"Accept-Charset: windows-1251",
"Accept-Encoding: identity",
"Connection: close",
"Cookie: test=5"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl);
if (!curl_errno($curl)) {
echo "<b>Код возврата:</b> ";
echo curl_getinfo($curl, CURLINFO_HTTP_CODE);
echo "<br><b>Заголовок Content-Type:</b> ";
echo curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
echo "<br><br>";
echo "<b>Заголовки ответа сервера:</b><br><br>";
echo "<pre>" . htmlspecialchars($content) . "</pre>";
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
curl_close($curl);
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
?>
Приведем также пример запроса методом POST, в котором мы не получаем заголовки ответа сервера, а только выводим содержимое страницы (листинг 56).
Листинг 56. Передача данных методом POST с использованием библиотеки CURL
<?php
$url = "http://wwwadmin.ru/testrobots.php";
@$curl=curl_init();
if (!curl_errno($curl)) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, "MySpider/1.0");
curl_setopt($curl, CURLOPT_HEADER, 0);
$headers = array(
"Accept: text/html, text/plain, application/xml",
"Accept-Language: ru, ru-RU",
"Accept-Charset: windows-1251",
"Accept-Encoding: identity",
"Connection: close",
"Cookie: test=5"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "var1=1&var2=5&var3=45");
$content = curl_exec($curl);
if (!curl_errno($curl)) {
echo "<b>Код возврата:</b> ";
echo curl_getinfo($curl, CURLINFO_HTTP_CODE);
echo "<br><b>Заголовок Content-Type:</b> ";
echo curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
echo "<br><br>";
echo "<b>Содержимое страницы:</b><br><br>";
echo "<pre>" . htmlspecialchars($content) . "</pre>";
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
curl_close($curl);
}
else {
echo "Произошла ошибка " . curl_errno($curl) . ": ";
echo curl_error($curl);
}
?>
Отправитель | Нити |
---|
26 пользователь(ей) активно (13 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 26 далее... |