Php curl несколько запросов

PHP
Использование cURL в PHP

Если вы хотите подражать HTML-форме POST-действия, вы можете использовать cURL.

// POST data in array $post = [ 'a' => 'apple', 'b' => 'banana' ]; // Create a new cURL resource with URL to POST $ch = curl_init('http://www.example.com'); // We set parameter CURLOPT_RETURNTRANSFER to read output curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Let's pass POST data curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // We execute our request, and get output in a $response variable $response = curl_exec($ch); // Close the connection curl_close($ch); 

Использование multi_curl для создания нескольких запросов POST

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

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

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

В этом примере мы используем две разные конечные точки:

//array of data to POST $request_contents = array(); //array of URLs $urls = array(); //array of cURL handles $chs = array(); //first POST content $request_contents[] = [ 'a' => 'apple', 'b' => 'banana' ]; //second POST content $request_contents[] = [ 'a' => 'fish', 'b' => 'shrimp' ]; //set the urls $urls[] = 'http://www.example.com'; $urls[] = 'http://www.example2.com'; //create the array of cURL handles and add to a multi_curl $mh = curl_multi_init(); foreach ($urls as $key => $url)

Затем мы используем curl_multi_exec для отправки запросов

//running the requests $running = null; do < curl_multi_exec($mh, $running); >while ($running); //getting the responses foreach(array_keys($chs) as $key) < $error = curl_error($chs[$key]); $last_effective_URL = curl_getinfo($chs[$key], CURLINFO_EFFECTIVE_URL); $time = curl_getinfo($chs[$key], CURLINFO_TOTAL_TIME); $response = curl_multi_getcontent($chs[$key]); // get results if (!empty($error)) < echo "The request $key return a error: $error" . "\n"; >else < echo "The request to '$last_effective_URL' returned '$response' in $time seconds." . "\n"; >curl_multi_remove_handle($mh, $chs[$key]); > // close current handler curl_multi_close($mh); 

Возможным возвратом для этого примера может быть:

Запрос на « http://www.example.com » возвратил «фрукты» через 2 секунды.

Запрос на « http://www.example2.com » вернул «морепродукты» через 5 секунд.

Создание и отправка запроса с помощью специального метода

По умолчанию PHP Curl поддерживает запросы GET и POST . Также можно отправлять пользовательские запросы, такие как DELETE , PUT или PATCH (или даже нестандартные методы), используя параметр CURLOPT_CUSTOMREQUEST .

$method = 'DELETE'; // Create a DELETE request $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); $content = curl_exec($ch); curl_close($ch); 

cURL может сохранять файлы cookie, полученные в ответах, для использования с последующими запросами. Для простой обработки cookie сеанса в памяти это достигается с помощью одной строки кода:

curl_setopt($ch, CURLOPT_COOKIEFILE, ""); 

В случаях, когда вы должны сохранять файлы cookie после уничтожения дескриптора cURL, вы можете указать файл для их хранения в:

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookies.txt"); 

Затем, когда вы хотите использовать их снова, передайте их как файл cookie:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookies.txt"); 

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

Обработка файлов cookie может использоваться, например, для извлечения ресурсов с веб-сайта, для которого требуется логин. Обычно это двухэтапная процедура. Сначала POST на страницу входа.

"joe_bloggs", "password"=>"$up3r_$3cr3t", )); # return the response body curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # send the request $result = curl_exec($ch); 

Второй шаг (после выполнения стандартной проверки ошибок) обычно является простым запросом GET. Важно повторить использование существующего дескриптора cURL для второго запроса. Это гарантирует, что файлы cookie с первого ответа будут автоматически включены во второй запрос.

# we are not calling curl_init() # simply change the URL curl_setopt($ch, CURLOPT_URL, "https://www.example.com/show_me_the_foo.php"); # change the method back to GET curl_setopt($ch, CURLOPT_HTTPGET, true); # send the request $result = curl_exec($ch); # finished with cURL curl_close($ch); # do stuff with $result. 

Это предназначено только для примера обработки файлов cookie. В реальной жизни вещи обычно сложнее. Часто вы должны выполнить начальное GET страницы входа, чтобы вытащить токен входа, который должен быть включен в ваш POST. Другие сайты могут блокировать клиент cURL на основе его строки User-Agent, требуя, чтобы вы его изменили.

Отправка многомерных данных и нескольких файлов с помощью CurlFile по одному запросу

Допустим, у нас есть форма, подобная приведенной ниже. Мы хотим отправить данные на наш веб-сервер через AJAX, а оттуда — на скрипт, запущенный на внешнем сервере.

Это та форма, которую мы хотим отправить

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

Предполагая, что запрос AJAX POST был успешным, мы получаем следующие данные на сайте PHP:

// print_r($_POST) Array ( [first_name] => John [last_name] => Doe [activities] => Array ( [0] => soccer [1] => hiking ) ) 

и файлы должны выглядеть так:

// print_r($_FILES) Array ( [upload] => Array ( [name] => Array ( [0] => my_photo.jpg [1] => my_life.pdf ) [type] => Array ( [0] => image/jpg [1] => application/pdf ) [tmp_name] => Array ( [0] => /tmp/phpW5spji [1] => /tmp/phpWgnUeY ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 647548 [1] => 643223 ) ) ) 

Все идет нормально. Теперь мы хотим отправить эти данные и файлы на внешний сервер, используя cURL с классом CurlFile

Поскольку cURL принимает только простой, но не многомерный массив, мы сначала должны сгладить массив $ _POST.

Для этого вы можете использовать эту функцию, например, которая дает вам следующее:

// print_r($new_post_array) Array ( [first_name] => John [last_name] => Doe [activities[0]] => soccer [activities[1]] => hiking ) 

Следующим шагом будет создание объектов CurlFile для загруженных файлов. Это делается в следующем цикле:

$files = array(); foreach ($_FILES["upload"]["error"] as $key => $error) < if ($error == UPLOAD_ERR_OK) < $files["upload[$key]"] = curl_file_create( $_FILES['upload']['tmp_name'][$key], $_FILES['upload']['type'][$key], $_FILES['upload']['name'][$key] ); >> 

curl_file_create является вспомогательной функцией класса CurlFile и создает объекты CurlFile. Мы сохраняем каждый объект в массиве $ files с ключами «upload [0]» и «upload [1]» для двух наших файлов.

Теперь нам нужно объединить сплющенный массив сообщений и массив файлов и сохранить его как $ data следующим образом:

$data = $new_post_array + $files; 

Последний шаг — отправить запрос cURL:

$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_POST => 1, CURLOPT_URL => "https://api.externalserver.com/upload.php", CURLOPT_RETURNTRANSFER => 1, CURLINFO_HEADER_OUT => 1, CURLOPT_POSTFIELDS => $data )); $result = curl_exec($ch); curl_close ($ch); 

Поскольку $ data теперь является простым (плоским) массивом, cURL автоматически отправляет этот запрос POST с типом контента: multipart / form-data

В upload.php на внешнем сервере теперь вы можете получить почтовые данные и файлы с $ _POST и $ _FILES, как обычно.

Получить и установить пользовательские заголовки HTTP в php

Отправка заголовка запроса

$uri = 'http://localhost/http.php'; $ch = curl_init($uri); curl_setopt_array($ch, array( CURLOPT_HTTPHEADER => array('X-User: admin', 'X-Authorization: 123456'), CURLOPT_RETURNTRANSFER =>true, CURLOPT_VERBOSE => 1 )); $out = curl_exec($ch); curl_close($ch); // echo response output echo $out; 

Чтение настраиваемого заголовка

print_r(apache_request_headers()); 
Array ( [Host] => localhost [Accept] => */* [X-User] => admin [X-Authorization] => 123456 [Content-Length] => 9 [Content-Type] => application/x-www-form-urlencoded ) 

Мы также можем отправить заголовок, используя синтаксис ниже:

curl --header "X-MyHeader: 123" www.google.com 
  • Начало работы с PHP
  • APCu
  • BC Math (бинарный калькулятор)
  • Imagick
  • IMAP
  • JSON
  • Loops
  • PDO
  • PHP MySQLi
  • php mysqli affected rows возвращает 0, когда он должен возвращать положительное целое число
  • PHP Встроенный сервер
  • PHPDoc
  • PSR
  • SimpleXML
  • SQLite3
  • Streams
  • URL-адрес
  • UTF-8,
  • WebSockets
  • XML
  • YAML в PHP
  • Автозагрузка грунтовки
  • Альтернативный синтаксис для структур управления
  • Анализ HTML
  • Асинхронное программирование
  • Аутентификация HTTP
  • Безопасность
  • Буферизация вывода
  • Вклад в PHP Core
  • Внедрение зависимости
  • Внесение изменений в Руководство по PHP
  • Волшебные константы
  • Волшебные методы
  • Вывод значения переменной
  • Выполнение по массиву
  • Генераторы
  • закрытие
  • Защитите Remeber Me
  • Интерфейс командной строки (CLI)
  • Использование cURL в PHP
  • Использование MongoDB
  • Использование Redis с PHP
  • Использование SQLSRV
  • Итерация массива
  • Как определить IP-адрес клиента
  • Как разбить URL-адрес
  • Класс Datetime
  • Классы и объекты
  • Клиент SOAP
  • Комментарии
  • Компилировать расширения PHP
  • Компиляция ошибок и предупреждений
  • Константы
  • Контрольные структуры
  • криптография
  • кэш
  • локализация
  • Манипулирование массивом
  • Манипуляции заголовков
  • Массивы
  • Машинное обучение
  • Менеджер зависимостей композитора
  • Многопоточное расширение
  • многопроцессорная обработка
  • Монго-PHP
  • Область переменных
  • Обработка изображений с помощью GD
  • Обработка исключений и отчетов об ошибках
  • Обработка нескольких массивов вместе
  • Обработка файлов
  • Общие ошибки
  • операторы
  • отладка
  • Отправка электронной почты
  • отражение
  • переменные
  • Переменные Superglobal PHP
  • Печенье
  • Поддержка Unicode в PHP
  • Пространства имен
  • Работа с датами и временем
  • Развертывание докеров
  • Регулярные выражения (regexp / PCRE)
  • Рекомендации
  • Рецепты
  • Розетки
  • Сервер SOAP
  • Сериализация
  • Сериализация объектов
  • сессии
  • Соглашения о кодировании
  • Создание PDF-файлов в PHP
  • Спектакль
  • Строковый анализ
  • Структуры данных SPL
  • Тестирование устройства
  • Тип жонглирования и нерегулярные проблемы сравнения
  • Тип подсказки
  • Типы
  • Установка в средах Linux / Unix
  • Установка среды PHP в Windows
  • Фильтры и функции фильтра
  • Форматирование строк
  • функции
  • Функции хеширования пароля
  • Функциональное программирование
  • Черты
  • Чтение данных запроса
  • Шаблоны проектирования

Источник

Читайте также:  Stack trace of exceptions java
Оцените статью