Авторизация POST на PHP с использованием curl


Содержание

АйТи бубен

Инструменты пользователя

Инструменты сайта

Содержание

Примеры использования cURL

cURL это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP , TELNET и др. Изначально cURL — это служебная программа для командной строки. PHP поддерживает работу с библиотекой cURL.

Тестирование HTTP при помощи cURL или rest-client

cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент коммандной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.

Пример использования и базовые опции:

Авторизация POST на PHP с использованием curl

Пример авторизация POST на PHP с использованием curl:

PHP: удаленный размер файла без загрузки файла

Функция вывод размер удаленного файла, используется библиотека PHP curl и HTTP метод запроса HEAD (параметр CURLOPT_NOBODY).

Авторизация cURL

18.01.2020, 14:22

Авторизация на curl
Народ, подскажите вот не понимаю, Есть url, допустим такой site.ru/blabla Но стоит условие.

Авторизация через Curl
Привет! Подскажите, пожалуйста, как авторизоваться на сайте инстаграм через curl по логину и.

Не проходит авторизация через curl
Всем доброго утра, народ помогите пожалуйста с авторизацией через curl, третий день ломаю голову, .

Авторизация на Яндексе используя curl
Доброго времени суток, появилась задача спарсить wordstat через curl. Но яндекс требует.

Пример использования в PHP библиотеки Curl для создания запросов Get/Post

Если вы работали с Linux , то использовали Curl для загрузки ресурсов из интернета. Эта библиотека также может использоваться для PHP post запросов .

Мы будем использовать

  • Ubuntu (14.04) в качестве операционной системы;
  • HTTP-сервер Apache (2.4.7) ;
  • PHP (5.5.9) .

1. Подготовка среды

1.1. Установка

Ниже приведены команды для установки Apache , PHP и PHP-библиотеки Curl :

1.2. Конфигурация PHP

В файле /etc/php/apache2/php.ini необходимо включить расширение Curl :

Не забудьте перезапустить Apache после внесения изменений, чтобы осуществлять PHP отправку post запроса Curl .

2. Запрос GET

Давайте посмотрим, как использовать Curl для создания запросов GET :

Вот, что мы делаем для PHP Curl post запроса:

  1. Мы создали сессию Curl с помощью функции curl_init() . В случае возникновения ошибки возвращается false , поэтому, прежде чем продолжить, мы должны проверить ее;
  2. После того, как мы успешно создали сессию Curl , нужно настроить ее с помощью функции curl_setopt_array() . В данном случае мы настроили сессию со следующими параметрами:
  • Сам URL-адрес . Для запросов GET нужно указать URL-адрес со строкой параметров, в формате key=value . Обратите внимание, как эта строка параметров составлена в функции stringifyParameters() : значения должны быть закодированы с помощью функции urlencode() ;
  • Для параметра CURLOPT_FOLLOWLOCATION задается значение true . Это нужно для перехода по HTTP-редиректам 3xx . Если установлено значение false , и для указанного URL-адреса задано перенаправление, мы не сможем достичь конечного ( целевого ) URL-адреса ;
  • Для параметра CURLOPT_RETURNTRANSFER задается значение true . Это позволяет сохранять HTTP — ответ в переменной;
  1. Необходимо проверить, не возвращают ли Curl ошибки, проверяя возвращаемые значения функций. Когда получаем значение false , можно получить информацию о последней ошибке для данной сессии Curl с помощью функции curl_error() ;
  2. Когда мы закончили обработку сессии Curl , нужно ее закрыть с помощью функции curl_close() .

Можно проверить этот скрипт и PHP отправить post запрос, введя, например, в адресной строке браузера localhost/path/to/curl_get.php?url=webcodegeeks.com&s=php .

3. Запрос POST

Для запросов POST мы должны настроить параметры Curl в несколько ином виде:

При установке URL-адреса мы задаем сам URL-адрес без параметров, которые задавались для запросов GET . Эти параметры указаны в опции CURLOPT_POSTFIELDS . Кроме этого мы определяем, что запрос будет выполнен с помощью метода POST ( CURLOPT_POST ).

Единственное различие между Curl-запросами POST и GET заключается в конфигурации сессии. Остальная часть скрипта отправки post запроса PHP одинакова для обоих случаев.

4. Инкапсуляция операций в классе Curl

При использовании Curl в проекте рекомендуется инкапсулировать весь код вместо использования функций, описанных выше. Иначе придется повторно запускать больше кода. Кроме этого повышается вероятность возникновения ошибок. Мы собираемся создать класс, который инкапсулирует эту логику.

В этом коде класса PHP Curl post запроса нет ничего, чего мы не рассматривали выше. За исключением способа, с помощью которого задаются параметры через функцию curl_setopt() .

Чтобы использовать этот класс, нужно сделать что-то вроде этого:

Приведенный выше код является более читаемым и простым в обслуживании. А также более гибким, так как он позволяет настроить любой параметр Curl .

Примечание: Запросы Curl могут быть использованы повторно, что позволяет увеличить производительность.

Данный скрипт обработки post запроса PHP будет работать без проблем. Это лучше, чем закрывать и открывать новую сессию Curl для каждого запроса. В нашем случае прирост производительности будет несущественным, но при нескольких запросах разница будет ощутимой.

Для повторного использования сессий Curl необходимо очистить и удалить установленные параметры, прежде чем добавлять новые. Это было сделано в файле curl_class.php с помощью функции curl_reset() .

5. Заключение

В этом примере я показал, как использовать в PHP-скриптах библиотеку Curl для создания запросов GET и POST , которые должны обрабатываться по-разному. Кроме этого мы разработали класс для более упорядоченной обработки Curl с помощью чистого и гибкого кода. Он позволяет повторно использовать уже открытые сессии для повышения производительности.

6. Скачайте исходный код

Это был пример использования Curl в PHP . Вы можете скачать его исходный код.

Данная публикация представляет собой перевод статьи « PHP Curl Get-Post Example » , подготовленной дружной командой проекта Интернет-технологии.ру

8 примеров использования cURL вместе с PHP

cURL и его расширение для PHP libcURL являются очень полезными инструментами при решении таких задач, как имитация веб браузера, отправка форм или регистрация на веб сервисе. В данном уроке мы рассмотрим несколько интересных применений cURL совместно с PHP.

1. Проверяем доступность определённого веб сайта

Как узнать, доступен ли определённый веб сайт? cURL поможет ответить на данный вопрос. Данный скрипт можно использовать совместно с планировщиком для мониторинга сайта.

Илон Маск рекомендует:  Статьи о заработке на продаже ссылок

Замените URL в строке 3 на тот, который вам нужен. Скопируйте код на свою страницу, и станет известно, доступен ли указанный сайт.

2. Замена cURL для функции file_get_contents()

Функция file_get_contents() очень полезная, но на многих хостингах она отключена. С помощью cURL можно написать функцию, которая будет работать в точности как file_get_contents() .

3. Получаем последний статус Twitter

С помощью PHP и cURL очень просто получить статус определённого пользователя. Данную информацию можно выводить в блоге.

Использовать функцию очень просто:

4. Twitter: проверяем отношения между двумя пользователями

Если вам нужно узнать, читает ли ваши твиты определенный пользователь, то можно задействовать API Twitter. Данный скрипт выводит true , если два пользователя, указанные на строчках 17 и 18, находятся в дружеских отношениях на Twitter. В противном случае возвращается false .

5. Загружаем и сохраняем изображения со страницы с помощью cURL

Данная функция может быть очень полезна: задаем ей URL страницы и она сохраняет все изображения с нее на вашем сервере.

6. Конвертируем валюту с помощью cURl и Google

Пересчет валюты достаточно простое дело, но курсы достаточно часто изменяются, поэтому приходится использовать сервисы, подобные Google, для получения текущих значений курса пересчета. Функция currency() получает 3 параметра: исходная валюта, целевая валюта и сумма.

7. Получаем информацию о размере файла с помощью cURL

Как определить размер определенного файла, расположенного на другом сервере? Поможет следующая функция. Она получает 3 параметра: URL файла, и (если требуется) имя пользователя и пароль.

8. Загрузка через FTP с помощью cURL

PHP имеет библиотеку FTP library, но также можно использовать cURL для загрузки файлов на FTP сервер. Вот рабочий пример:

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.catswhocode.com/blog/amazing-things-to-do-with-php-and-curl
Перевел: Сергей Фастунов
Урок создан: 14 Февраля 2012
Просмотров: 114507
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Урок по cURL: основы использования и пара полезных трюков (часть первая)

Pirnazar

Well-known member

Для чего нужна cURL

  • cURL отлично подходит для имитации действий пользователя в браузере.

Реальный практический пример: вам нужно перезагрузить роутер (модем) для смены IP адреса. Для этого нужно: авторизоваться в роутере, перейти к странице обслуживания и нажать кнопку «Перезагрузка». Если это действие нужно выполнить несколько раз, то процедуру нужно повторить. Согласитесь, делать каждый раз в ручную эту рутину не хочется. cURL позволяет автоматизировать всё это. Буквально несколькими командами cURL можно добиться авторизации и выполнения задания на роутере.

  • cURL удобен для получения данных с веб-сайтов в командной строке.

Ещё один практический пример: мы хотим реализовать показ общей статистики для нескольких сайтов. Если использовать cURL, то это становится вполне тривиальной задачей: с помощью cURL мы проходим аутентификацию на сервисе сбора статистики (если это требуется), затем (опять же командами cURL) получаем необходимые страницы, парсим нужные нам данные; процедура повторяется для всех наших сайтов, затем мы складываем и выводим конечный результат.

Т.е. случаи использования cURL вполне реальные, хотя, в большинстве, cURL нужна программистам, которые используют её для своих программ.

cURL поддерживает множество протоколов и способов авторизации, умеет передавать файлы, правильно работает с кукиз, поддерживает SSL сертификаты, прокси и очень многое другое.

cURL в PHP и командной строке

Мы можем использовать cURL двумя основными способами: в скриптах PHP и в командной строке.

Чтобы включить cURL в PHP на сервере, необходимо в файле php.ini раскомментировать строку

А затем перезагрузить сервер.

На Linux необходимо установить пакет curl.

На Debian, Ubuntu или Linux Mint:

Чтобы наглядно было видно разницу в использовании в PHP и в командной строке, будем одни и те же задачи выполнять дважды: сначала в скрипте PHP, а затем в командной строке. Постараемся при этом не запутаться.

Получение данных при помощи cURL

Получение данных при помощи cURL в PHP

Всё очень просто:
$target_url — адрес сайта, который нас интересует. После адреса сайта можно поставить двоеточие и добавить адрес порта (если порт отличается от стандартного).

curl_init — инициализирует новый сеанс и возвращает дискриптор, который в нашем примере присваивается переменной $ch.

Затем мы выполняем запрос cURL функцией curl_exec, которой в качестве параметра передаётся дискриптор.

Всё очень логично, но при выполнении этого скрипта, на нашей странице отобразиться содержимое сайта. А что если мы не хотим отображать содержимое, а хотим записать его в переменную (для последующей обработки или парсинга).

Чуть дополним наш скрипт:

У нас появилась строчка curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt — задаёт опции. Полный список опций можно найти на этой странице:

Теперь значение скрипта присваивается переменной $response_data, с которой можно проводить дальнейшие операции. Например, можно вывести её содержимое.

служат для отладки, на случай возникновения ошибок.

Получение данных при помощи cURL в командной строке

В командной строке достаточно набрать

где вместо mi-al.ru — адрес вашего сайта.

Если нужно скопировать данные в переменную, а не выводить полученный результат на экран, то делаем так:

Чтобы они не выводились, добавляем ключ -s:

PHP парсер с авторизацией

Часто возникают задачи, требующие получения данных со страниц сайта, которые показываются только залогиненным пользователям. В этом случае нам нужно написать парсер с автоматической авторизацией.

Информация о том, авторизован пользователь или нет, часто хранится в Cookies. Составить правильный запрос и обработать файлы Cookies нам поможет библиотека cURL.

Предварительно нужно понять, как работает механизм авторизации на сайте, какие передаются переменные после отправки данных формы входа. Эти данные можно проанализировать с помощью инструментов разработчика в браузере.

В качестве примера разберём парсер баланса баллов в интернет-магазине Gearbest. В html коде формы входа видим название полей ввода логина и пароля, а также адрес страницы-обработчика: /m-users-a-act_sign.htm.

Далее попытаемся авторизоваться и отследить какие запросы отправляются на сервер. Введя правильные логин и пароль мне не удалось успеть увидеть нужные запросы, так как происходит несколько редиректов. А сам запрос авторизации отправляется по AJAX.

Поэтому решил посмотреть, что происходит при вводе неверных данных. В этом случае удалось отследить нужные запросы и структуру переменных.

На следующем шаге смотрим код страницы личного кабинета и прикидываем, как спарсить данные баланса бонусных баллов.

На основе полученной информации можно написать PHP парсер баланса баллов с авторизацией. Я решил дописать ряд функций для парсера из предыдущего примера. Для составления POST запросов используем функции библиотеки cURL.

Полученный в результате код парсера с авторизацией:

Илон Маск рекомендует:  Asp службы транзакций asp

Для того, чтобы парсер смог авторизоваться, надо ввести свои данные в переменную $user_data.

Из значимых доработок парсера стоит отметить написание функции curl_login(), которая как раз формирует запрос на авторизацию с отправкой POST параметров на сервер. Также для всех функций были добавлены парметры работы с Cookies. Это нужно для того, чтобы информация о том, что парсер залогинен, передавалась от запроса к запросу.

Пример файла Cookies, сгенерированного cURL:

После авторизации с помощью функции get_gearbest_login(), мы далее сразу парсим страницу с листом желаний личного кабинета с помощью функции get_gearbest_point().

Далее выводим статус попытки авторизации и бонусный баланс.

Возможные варианты ответов от сервера gearbest.com при попытке авторизации:


  • Successfully sign;
  • The email does not exist, please register;
  • Your email/password is incorrect. Please try again;
  • needCode.

Кстати, если вначале авторизоваться и спарсить баланс баллов, то дальше при парсинге цен на товары, статус авторизованного пользователя будет сохраняться.

Теперь мы знаем, как можно автоматически с помощью PHP и cURL залогиниться на сайте и получить данные со страниц для авторизованных пользователей. В следующих статьях из цикла про разработку парсеров мы рассмотрим примеры применения технологии AJAX для парсинга сайтов.

Авторизация POST на PHP с использованием curl

Пример входа на сайт через логин-пароль.

Вначале вытягивается страница входа с полями логин-пароль и спецполем token. Потом пересылается логин-пароль и токен через POST и вытягивается страница уже после логина.

/*Дальше устанавливаем опции запроса в любом порядке*/

//Здесь устанавливаем URL к которому нужно обращаться

curl_setopt ($curl, CURLOPT_URL , ‘https://www.olark.com/login/’);

//Настойка опций cookie

curl_setopt ($curl, CURLOPT_COOKIEJAR , ‘cook.txt’); //сохранить куки в файл

curl_setopt ($curl, CURLOPT_COOKIEFILE , ‘cook.txt’); //считать куки из файла

//устанавливаем наш вариат клиента (браузера) и вид ОС

curl_setopt ($curl, CURLOPT_USERAGENT , «Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0»);

//Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP завершал работу скрыто, если возвращаемый HTTP-код имеет значение выше 300. По умолчанию страница возвращается нормально с игнорированием кода.

curl_setopt ($curl, CURLOPT_FAILONERROR , 1 );

//Устанавливаем значение referer — адрес последней активной страницы

curl_setopt ($curl, CURLOPT_REFERER , ‘http://www.olark.com/’);

//Максимальное время в секундах, которое вы отводите для работы CURL-функций.

curl_setopt ($curl, CURLOPT_TIMEOUT , 3 );

curl_setopt ($curl, CURLOPT_POST , 1 ); // устанавливаем метод POST

//ответственный момент здесь мы передаем наши переменные

curl_setopt ($curl, CURLOPT_POSTFIELDS , ‘http://www.olark.com/login/’);

//Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.

curl_setopt ($curl, CURLOPT_HEADER , 1 );

//Внимание, важный момент, сертификатов, естественно, у нас нет, так что все отключаем

curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER , 0 ); // не проверять SSL сертификат

curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST , 0 ); // не проверять Host SSL сертификата

curl_setopt ($curl, CURLOPT_FOLLOWLOCATION , 1 ); // разрешаем редиректы

curl_setopt ($curl, CURLOPT_RETURNTRANSFER , 1 );

$html = curl_exec ($curl); // выполняем запрос и записываем в переменную

curl_close ($curl); // заканчиваем работу curl

//подключаем PHP Simple HTML DOM Parser с сайта http://simplehtmldom.sourceforge.net

$html = str_get_html ($html);

//ищем в странице некий authenticity_token и записываем его в переменную $token

$input = $inputs[ 0 ];

// Авторизуемся на сайте со значением authenticity_token в переменной $token

$curl = curl_init (); // инициализируем cURL

/*Дальше устанавливаем опции запроса в любом порядке*/

//Здесь устанавливаем URL к которому нужно обращаться

curl_setopt ($curl, CURLOPT_URL , ‘https://www.olark.com/login/’);

//Настойка опций cookie

curl_setopt ($curl, CURLOPT_COOKIEJAR , ‘cook.txt’); //сохранить куки в файл

curl_setopt ($curl, CURLOPT_COOKIEFILE , ‘cook.txt’); //считать куки из файла

//устанавливаем наш вариат клиента (браузера) и вид ОС

curl_setopt ($curl, CURLOPT_USERAGENT , «Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0»);

//Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP завершал работу скрыто, если возвращаемый HTTP-код имеет значение выше 300. По умолчанию страница возвращается нормально с игнорированием кода.

curl_setopt ($curl, CURLOPT_FAILONERROR , 1 );

//Устанавливаем значение referer — адрес последней активной страницы

curl_setopt ($curl, CURLOPT_REFERER , ‘http://www.olark.com/’);

//Максимальное время в секундах, которое вы отводите для работы CURL-функций.

curl_setopt ($curl, CURLOPT_TIMEOUT , 3 );

curl_setopt ($curl, CURLOPT_POST , 1 ); // устанавливаем метод POST

//ответственный момент здесь мы передаем наши переменные

//замените значения your_name и your_pass на соответственные значения Вашей учетной записи

//Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.

curl_setopt ($curl, CURLOPT_HEADER , 1 );

//Внимание, важный момент, сертификатов, естественно, у нас нет, так что все отключаем

curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER , 0 ); // не проверять SSL сертификат

curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST , 0 ); // не проверять Host SSL сертификата

curl_setopt ($curl, CURLOPT_FOLLOWLOCATION , 1 ); // разрешаем редиректы

$result = curl_exec ($curl); // выполняем запрос и записываем в переменную

curl_close ($curl); // заканчиваем работу curl

echo $result; // Выводим на экран результат выполнения

ez code

Просто о сложном.

Продвинутое использование cURL в PHP

cURL — это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP, TELNET и др. Изначально cURL — это служебная программа для командной строки. Но, к счастью для нас, PHP поддерживает работу с библиотекой cURL. В этой статье мы рассмотрим нетривиальные примеры работы с cURL.

Почему cURL?

На самом деле, есть много других способов отправить запрос на другой сервер чтобы, например, получить содержимое страницы. Многие, в основном из-за лени, используют простые PHP функции, вместо cURL:

Однако они не позволяют эффективно обрабатывать ошибки. Также есть ряд задач, которые им вовсе не под силу — например, работа с cookies, авторизация, post запросы, загрузка файлов.

cUrl — мощный инструмент, который поддерживает множество протоколов и предоставляет полную информацию о запросе.

Основы cUrl

Прежде чем перейти к сложным примерам, рассмотрим базовую структуру cURL запроса в PHP. Для выполнения cURL запроса в PHP необходимо сделать 4 основных шага:

  1. Инициализация.
  2. Установка опций.
  3. Выполнение запроса.
  4. Очистка ресурсов.

В основном в этой статье мы будем рассматривать шаг №2, так как там происходит основная магия. Список cURL опций очень большой, поэтому все опции рассматривать сегодня мы не будем, а используем те, которые пригодятся для решения конкретных задач.

Отслеживание ошибок

При необходимости, вы можете добавить следующие строки для отслеживания ошибок:

Обратите внимание, мы используем «===» вместо «==», т.к. надо отличать пустой ответ сервера от булевского значения FALSE, которое возвращается в случае ошибки.

Получение информации о запросе

Другой необязательный шаг — получение информации о cURL запросе, после его выполнения.

В результате вы получите массив со следующей информацией:

  • «url»
  • «content_type»
  • «http_code»
  • «header_size»
  • «request_size»
  • «filetime»
  • «ssl_verify_result»
  • «redirect_count»
  • «total_time»
  • «namelookup_time»
  • «connect_time»
  • «pretransfer_time»
  • «size_upload»
  • «size_download»
  • «speed_download»
  • «speed_upload»
  • «download_content_length»
  • «upload_content_length»
  • «starttransfer_time»
  • «redirect_time»

Отслеживание редиректов, в зависимости от браузера

В этом примере мы напишем скрипт, который будет определять перенаправления в зависимости от разных настроек браузера. Например, некоторые сайты перенаправляют посетителей с мобильных устройств, посетителей из других стран.

Мы будем использовать опцию CURLOPT_HTTPHEADER для установки наших собственных заголовков, включая User-Agent и язык и посмотрим, куда перенаправляют нас сайты.

В цикле проверяем браузеры для каждого урла. Сперва мы устанавливаем опции для нашего запроса: URL и тестируемый браузер и язык.

Т.к. мы установили специальную опцию, результат выполнения запроса будет содержать только HTTP заголовки. С помощью простого регулярного выражения мы можем проверить содержит ли ответ строку «Location:».

Результат выполнения скрипта:

Отправляем POST запросы

При выполнении GET запросов данные можно передавать в строке запроса. Например, когда вы ищете в гугле, ваш запрос передается в URL:

Чтобы получить результат этого запроса, вам даже не понадобится cURL, вы можете быть ленивым и использовать «file_get_contents()».

Но некоторые HTML формы используют метод POST. В таком случае данные отправляются в теле сообщения запроса, а не в самом URL.

Илон Маск рекомендует:  Opengl лекция №1 введение события сообщения контекст

Напишем скрипт, который будет отправлять POST запросы. Для начала создадим простой PHP файл, который будет принимать эти запросы и возвращать отправленные ему данные. Назовем его post_output.php :

Далее напишем PHP скрипт, который отправит cURL запрос:

Данный скрипт выведет:

Данный скрипт отправил POST запрос файлу post_output.php. который вывел содержимое массива $_POST и мы получили этот ответ с помощью cURL.

Загрузка файлов

Загрузка файлов очень похожа на предыдущий скрипт, т.к. загрузка файлов всегда выполняется с помощью POST запросов.

Так же как и в предыдущем примере, создадим файл, который будет принимать запросы, upload_output.php :

И сам скрипт, загружающий файлы:

Если вы хотите загрузить файл, все что необходимо — это передать путь к нему, так же как обычный параметр POST запроса, поставив вначале «@». Результат работы скрипта:

Multi cURL

Одна из продвинутых возможностей cURL в PHP — это возможность выполнения нескольких запросов одновременно и асинхронно.

В обычных условиях скрипт останавливается и ждет выполнения запроса. И если вам надо выполнить много запросов, то это может занять много времени, т.к. вы будете выполнять последовательно. Это ограничение можно обойти:

Идея состоит в том, что вы можете создать множество cURL дескрипторов, объединить их под одним мульти-дескриптором и выполнять их асинхронно.

Сначала все как и с обычным cURL запросом — создается дескриптор (curl_init()), задаются параметры (curl_setopt()). Далее создается мульти-дескриптор (curl_multi_init()) и добавляются ранее созданные обычные дескрипторы (curl_multi_add_handle()). Вместо обычного вызова curl_exec() мы будем многократно вызывать curl_multi_exec() данная функция информирует нас о количестве активных соединений с помощью второго параметра — $running. Поэтому цикл работает пока $running не станет равным 0. И, конечно, после окончания работы необходимо освободить ресурсы.

В данном примере мы просто выводим результат запросов в STDOUT. Рассмотрим нетривиальный случай применения multi cURL.

Проверка внешних ссылок в WordPress

Представьте себе блог с большим количеством постов, содержащих ссылки на внешние сайты. Некоторые из этих ссылок могут быть не рабочими.

Напишем скрипт, который найдет все нерабочие ссылки и покажет их нам.

Для начала нам необходимо вытащить все внешние ссылки из базы данных:

В этой части скрипта мы просто вытаскиваем из базы все внешние ссылки. Проверим их:

Рассмотрим код подробнее (нумерация соответствует комментариям в коде):

  1. Добавляем начальное количество дескрипторов, чтобы не перегружать систему потоками. Количество регулируется переменной $max_connections.
  2. В переменной $curRunning хранится количество работающих потоков, в $running — предыдущее значение, если они станут не равными, то один из потоков завершил работу.
  3. Получаем информацию о выполненном запросе.
  4. Если нет ответа сервера — ссылка не рабочая.
  5. Ответ сервера — 404.
  6. Иначе ссылка работает.
  7. Запрос выполнен, освобождаем ресурсы.
  8. Добавим новый урл к мульти дескриптору.
  9. Функция add_url_to_multi_handle() добавляет новый дескриптор с заданным урлом к мульти-дескриптору.

Проверка заняла около 2 секунд. Запуская одновременно по 10 потоков производительность возрастает в 10 раз, по сравнению с обычными cURL запросами. Чтобы получить содержимое ответа сервера используйте функцию curl_multi_getcontent($ch), где $ch — дескриптор, полученный из curl_multi_info_read().

Другие возможности cURL в PHP

HTTP аутентификация

Если HTTP запрос требует аутентификацию, используйте следующий код:

Загрузка по FTP

В PHP есть своя библиотека для работы с FTP, но можно использовать и cURL:

Использование прокси

Запросы можно выполнять через определенный proxy:

Колбэки (callback functions)

Есть возможность использовать колбэки во время выполнения запроса, не дожидаясь его завершения. Например, во время того как ответ сервера загружается мы можем использовать уже полученные данные, не дожидаясь полной загрузки.

Колбэк функция должна возвращать длину строки для правильной работы запроса.

Каждый раз, когда будет получена очередная часть ответа сервера, будет вызван колбэк.

Заключение

В этой статье мы рассмотрели продвинутые возможности cURL в PHP. В следующий раз, когда вам понадобится делать URL запросы — используйте cURL.

Как включить заголовок авторизации в HTTP-запросе cURL POST в PHP?

Я пытаюсь получить доступ к почтовым сообщениям пользователя через Gmails OAuth 2.0, и я выясню это через платформу Google OAuth 2.0

Здесь они указали, что мне нужно отправить это как HTTP-ЗАПРОС:

Я пробовал написать код для отправки этого ЗАПРОСА следующим образом:

Не работает, пожалуйста, помогите.:)

ОБНОВЛЕНИЕ: Я взял совет Джейсона Маккрири, и теперь мой код выглядит следующим образом:

Но я не получаю выход из этого. Я думаю, что cURL тихо где-то терпит неудачу. Пожалуйста, помогите.:)

ОБНОВЛЕНИЕ 2: NomikOS трюк сделал это для меня.:):):) Спасибо!

@jason-mccreary абсолютно прав. Кроме того, я рекомендую вам этот код получить дополнительную информацию в случае сбоя:

Для отладки вы можете установить CURLOPT_HEADER в true, чтобы проверить ответ HTTP с помощью firebug:: net или аналогичного.

О Curl error: SSL certificate problem, verify that the CA cert is OK попробуйте добавить эти заголовки (просто для отладки, в производственной среде вы должны сохранить эти параметры в true ):

Авторизация POST на PHP с использованием curl

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL