Четверг, 28.03.2024. 13:37 | RSS
 Приветствуем Вас, Гость! Регистрация | Вход с параметрами
Меню сайта
Категории каталога
Обзоры оборудования [44]
Обзоры различного оборудования, побывавшего в руках автора сайта: ноутбуки, винчестеры, мониторы, материнские платы, видеокарты и др.
Тестирование [7]
Отчасти перекликается с обзорами оборудования, однако здесь сделан упор именно на тестирование в каких-либо бенчмарках
Практика апгрейда [9]
Статьи, посвященные вопросам апгрейда компьютера. Примеры конфигураций, оценка стоимости
Решение проблем [5]
Рассматриваются различные мелкие и не очень проблемы и их возможные варианты решения
Обзоры софта [6]
Обзоры программного обеспечения: антивирусы, браузеры, утилиты и др.
Игры [37]
Обзоры игр, советы по прохождению
Программирование, 1С [13]
Освещаются вопросы по программированию, в немалой степени - на платформе 1С: Предприятия
Цифровое фото, видео [5]
Выделенный раздел, посвященным цифровым фотоаппаратам и видеокамерам
Вход на сайт
Параллельные проекты
Друзья сайта
Статистика

Околокомпьютерный сайт Дмитрия Косолапова
Главная » Статьи » Программирование, 1С

cURL - если запрещено allow_url_fopen (PHP)

Если нужно работать с каким-либо внешним источником данных, а функции вида file_get_contents не работают из-за запрета allow_url_fopen, то можно попробовать воспользоваться расширением cURL. Его применение рассмотрим на примере работы с Яндекс.XML.

При работе на реальном хостинге часто можно столкнуться с теми или иными ограничениями, и одно из них - запрет allow_url_fopen, таким образом, воспользоваться "волшебной" функцией file_get_contents для получения информации с какого-то внешнего ресурса не получится. Однако вполне вероятно, что будет доступно расширение cURL, с помощью которого можно решить аналогичную задачу, при этом поддерживаются, в том числе, POST-параметры.

Однажды мне пришлось решать задачу выполнения запроса к сервису Яндекс.XML (при этом хостинг как раз обладал вышеозначенными характеристиками), который еще к тому же требует передачи параметров через POST. Итак, при использовании cURL задачу можно решить следующим образом:

Code

$url = 'http://xmlsearch.yandex.ru/xmlsearch?user='. $username .'&key='. $yand_key;
$req = '<request><query>'. $query .'</query></request>';
$req_xml = simplexml_load_string($req);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/xml"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req_xml->asXML());
curl_setopt($ch, CURLOPT_POST, true);
$response = curl_exec($ch);
curl_close($ch);

Итак, $username и $yand_key - имя пользователя и ключ для Яндекса, $query - поисковый запрос. С помощью simpexml мы формируем "правильную" xml-строку для передачи ее в качестве параметра Яндексу. Наконец, самое главное - инициализируем переменную $ch, с помощью которой мы и получим вожделенный результат.

После инициализации необходимо установить ряд параметров (функцией curl_setopt), среди которых наиболее интересные:

  • CURLOPT_RETURNTRANSFER - чтобы мы "забрали" содержимое в переменную (иначе оно просто выведется на экран);
  • CURLOPT_POSTFIELDS - как раз наш запрос в виде POST-параметра. В общем случае сюда скорее всего наиболее удобно передавать ассоциативный массив: ключ (параметр) - значение.

Остальные параметры, на мой взгляд, довольно очевидные. Функцией curl_exec мы, собственно, и получаем то, что нам нужно, после чего желательно освободить наш ресурс функцией curl_close. Чтобы убедиться, что все в порядке, необходимо выполнить проверку вида if ($response!==FALSE). Далее задача сводится к XML-парсингу, который можно выполнить, например, с помощью объекта XMLReader, и за рамки заметки это уже выходит.

Надо сказать, что возможности cURL весьма и весьма широки (для того, чтобы в этом убедиться, достаточно открыть справку по той же функции curl_setopt), но данной заметкой я хотел продемонстрировать относительно простой пример работы с этим расширением.

Категория: Программирование, 1С | Добавил: Vetkhy (12.01.2012) | Автор: Дмитрий Косолапов | Просмотров: 5610

Метки: allow_url_fopen, открытие внешних страниц, post, PHP, Curl

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Сайт управляется системой uCozДмитрий Косолапов © 2007-2024