пост запрос php curl

Технология cURL

Я знаю достаточно много примеров, где для получения сторонних web-страниц (парсеры) использовались совершенно другие способы, отличные от cURL. Например:

Почему разработчики использовали их и что в них не так? А потому, что не знали, либо не хотели знать, что такое cURL. А не так в них то, что функционал ограничен: получили страницу и все на этом, в то время, как cURL может отправить форму на странице, получить ответ, обработать ошибку, начать всё заново и т.д.

Принцип работы cURL

При использовании cURL-запросов существует 4 основных шага, которые должны (обязаны) быть в вашем скрипте, это:

Без любого из этих шагов ваш скрипт обречен на неудачу. Итак, основные шаги:

Думаю что все шаги вам понятны за исключением второго: «Указания параметров». На этом шаге мы остановимся более подробно, т.к. именно он задает все необходимые настройки / параметры / методы.

Ошибки в ходе работы скрипта

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

Отмечу, что знак сравнения здесь ‘===’, а не ‘==’, т.е. сравнивается именно на наличие логического FALSE, а не пустой строки или строки ‘false’.

Результат запроса

Ну а после того, как CURL-запрос был выполнен, неплохо бы было знать, что он вернул:

А вот какие еще даные мы можем получить:

Индекс массиваЗначениеИндекс массиваЗначение
urlstring(17) «https://intop24.ru»content_typestring(24) «text/html; charset=utf-8»
http_codeint(200)header_sizeint(218)
request_sizeint(49)filetimeint(-1)
ssl_verify_resultint(0)redirect_countint(0)
total_timefloat(0.009419)namelookup_timefloat(1.3E-5)
connect_timefloat(1.3E-5)pretransfer_timefloat(1.4E-5)
size_uploadfloat(0)size_downloadfloat(46523)
speed_downloadfloat(4939271)speed_uploadfloat(0)
download_content_lengthfloat(-1)upload_content_lengthfloat(0)
starttransfer_timefloat(0.009374)redirect_timefloat(0)
certinfoarray(0)

redirect_urlstring(0) «»

POST запрос с помощью CURL

Давайте напишем наш первый скрипт, который отправит данные методом POST на какую-нибудь страницу и посмотрит, что отобразилось на этой странице.

Сначала нам нужен файл, который бы принял наши данные и что-то вывел на страницу. Я расположил его по адресу https://intop24.ru/demo/curl/post.php. В нем содержится следующий код:

Теперь попробуем передать туда какие-то данные:

Результат можно посмотреть здесь: curl_post.php

Отправка файла с помощью CURL

Смысл здесь абсолютно такой же, как и в запросе POST.

Файл, который примет данные: https://intop24.ru/demo/curl/upload_file.php.

Теперь попробуем передать туда какие-то данные:

Результат можно посмотреть здесь: curl_post_file.php

HTTP аутентификация с помощью CURL

Довольно полезная штука.

Запрос сURL через прокси

Источник

Базовая работа с PHP CURL: GET, POST, JSON, Headers

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

PHP cURL основы

Отправка GET запроса из PHP cURL

Иногда стоит необходимость отправки GET-запроса, формируя URL-адрес из Query-параметров. Для таких случаев, можете воспользоваться встроенной PHP-функцией, формирующей URL-строку с параметрами из массива:

Теперь вы знаете, как склеить массив данных в URL из PHP.

Отправка POST запроса из PHP cURL

PHP cURL POST запрос обычно не выполняется с пустым телом. Запрос этого типа считается запросом на добавление данных (создание новой сущности в БД, к примеру) и обычно нам необходимо передавать серверу набор каких-то данных. Код отправки POST-запроса с передачей данных будет выглядеть так:

Отправка cURL запроса из PHP с собственными заголовками (PHP cURL Headers)

Отправка POST JSON запроса в PHP cURL

Очень часто, при написании ботов, имитирующих взаимодействие с API, приходится отправлять данные на целевой сервер в формате JSON. И так сложилось, что отправка Form-Data POST параметров отличается от алгоритма отправки JSON данных, потому, и передавать эти данные для cURL нужно по-другому.

Для того, чтобы корректно передать данные в формате JSON через PHP cURL, необходимо исходный массив с параметрами, перекодировать в JSON вручную, и заполнить этими данными тело (body) запроса. А так же, чтобы сервер понял, что это данные в формате JSON, нужно передать соответствующие HTTP-заголовки (о которых мы говорили выше).

Основной принцип передачи данных в JSON с помощью CURL заключается в том, что нужно выполнить POST запрос, тело которого заполнить закодированными в JSON данными, после чего, указать соответствующий заголовок позволяющий серверу понять, что ему на обработку пришли JSON данные.

Резюме

Работа всех этих опций, их работа и настройка подробно рассказано в этой статье. А так же, на закрепление этого материала, в следующей статье был изложен алгоритм написания ботов на PHP, советую почитать, и попробовать написать собственного бота, чтобы полноценно разобраться в этой теме. Эта статья охватывает большинство важных тем: отправка POST-запросов, обработка ответов, имитация браузера из PHP.

Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql

Get the latest posts delivered right to your inbox

Источник

cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью

В этой статье мы рассмотрим эффективные приемы работы с cURL, отправление POST, GET и т.д. запросов, работу с cookie, заголовки, JSON а также в конце статьи будут некоторые полезные инструменты, которые могут значительно облегчить вам работу с HTTP запросами.

GET запрос при помощи cURL

Для того, чтобы отправить запрос, нужно создать объект при помощи функции curl_init(), а затем следует настроить его.

Все настройки, которые вы можете найти по этой ссылке. Там вы найдете опции, которые мы будем устанавливать функцией curl_setopt, в дальнейших примерах.

Пример простого GET запроса при помощи cURL:

Если в результате сервер вернет нам редирект, то мы по нему автоматически не перейдем. А иногда это бывает полезно. Чтобы cURL автоматически шел по редиректу нужно установить опцию CURLOPT_FOLLOWLOCATION.

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

POST запрос при помощи cURL

Теперь давайте отправим post запрос на адрес https://httpbin.org/anything

Отлично, с GET и POST запросами в cURL мы немного освоились. Теперь разберемся с заголовками, которые мы можем отсылать в запросе.

Заголовки устанавливаются при помощи опции CURLOPT_HTTPHEADER Чтобы получше узнать, для чего нужна эта опция давайте попробуем отправить POST запрос в формате JSON

cURL: POST запрос в формате JSON

Отличия конфигурации JSON запроса от обычного POST запроса заключается в том, что мы кодируем поля при помощи json_encode() И добавляем заголовок Content-Type: application/json

cURL: GET запрос в формате JSON

GET запрос в формате JSON отправляется так же как и POST запрос, просто нужно CURLOPT_CUSTOMREQUEST установить в ‘GET’

cURL и другие виды HTTP запросов: PUT, DELETE, HEAD, PATCH, OPTIONS, CONNECT и т.д.

Стоп, Дмитрий, прекрати выдумывать виды запросов!

Ничего я не выдумываю: HTTP протокол предполагает множество типов HTTP запросов просто POST и GET являются более распространенными.

Чтобы отправить PUT запрос, нужно установить опцию CURLOPT_PUT таким образом:

Это делается по тому же принципу, как и CURLOPT_POST. Но что делать с остальным зоопарком запросов? Разве у cURL есть CURLOPT_DELETE или CURLOPT_HEAD? Нет.

Для того, чтобы отправлять другие виды запросов есть другая опция: CURLOPT_CUSTOMREQUEST

Вместо строки curl_setopt($curl, CURLOPT_POST, true); мы явно задаем имя запроса опцией CURLOPT_CUSTOMREQUEST:

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

Как получить заголовки ответа

В предыдущем примере мы научились посылать заголовки. Самый правильный способ принять заголовки:

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

Рассмотрим такой пример:

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

Скачивание больших файлов с помощью cURL

Для того, чтобы скачать большой файл пригодится этот способ:

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

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

Параллельные cURL запросы в PHP

Для чего могут потребоваться многопоточные запросы? Например у нас есть много URL адресов:

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

Как выполнить 3 запроса одновременно? В этом нам поможет curl_multi_

Давайте решим конкретную задачу при помощи параллельных curl запросов. Нам нужно отправить одновременно 3 запроса.

Такие параллельные запросы выполняются значительно быстрее чем поочередные.

cURL запросы с сохранением и загрузкой cookie из файла

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

Давайте рассмотрим такой пример:

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

Передача cookie без файлов

Иммитация браузера с помощью cURL

Иногда сайт, к которому мы обращаемся может фильтровать запросы, защищаясь от парсинга. Если для этого используются упрощенные способы защиты, например проверка User-Agent, то мы можем легко притвориться, что являемся реальным польователем, который взаимодействует с сайтом через браузер, мы можем послать заголовки и cookie, которые обычно посылает браузер.

В данном примере установлены заголовки, которые посылает Chrome.

В простых ситуациях этого хватает. Но если используется защита при помощи javascript или что-то более продвинутое, то здесь cURL бессилен, и следует использовать либо BAS либо Zennoposter. Либо если вы хотите попытать счастье с PHP, то Selenium.

Не используйте эти знания в противоправных целях.

cURL запросы через прокси

Простой пример для отправки запросов через proxy. Если ваш прокси предполагает авторизацию, то раскомментируйте соответствующие строчки.

Отправка файлов

Авторизация с помощью cURL

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

Чтобы с помощью cURL авторизироваться на сайте, который использует Basic HTTP-аутентификацию нужно установить опцию CURLOPT_USERPWD, в которой будет наш логин и пароль.

OAuth авторизация

Авторизация через форму

Давайте применим полученные нами знания и авторизируемся на каком-нибудь сайте. Для этого нужно посмотреть куда форма отправляет данные и отправить туда то же самое.

Допустим на сайте есть такая форма:

Тогда наш cURL запрос должен быть сформирован так:

Автоматическое построение запросов

Перевод консольной команды curl в PHP

И вот еще один сервис, который переводит консольную команду curl в PHP: https://incarnate.github.io/curl-to-php/

Так вы можете создать простые запросы на cURL в PHP не создавая их вручную.

Лайфхак

В консоли браузера, во вкладке сеть, вы можете кликнуть правой кнопкой мыши и скопировать любой запрос в виде команды cURL, а потом с помощью сервиса curl-to-php перевести запрос в PHP. Теперь вы вообще можете сконвертировать в cURL абсолютно любой запрос, который посылает ваш браузер.

Как работать с cURL гораздо проще

Вы можете спросить: почему у cURL такие кривые и страшные методы? У вас может возникнуть желание взять и создать обертку для работы с cURL, чтобы вы могли не писать каждый раз большие куски некрасивого кода, а писать все проще, например так:

К счастью, такая обертка уже написана и найти ее можно здесь: https://github.com/php-curl-class/php-curl-class

Просто установите ее при помощи: composer require php-curl-class/php-curl-class и не работайте с кривыми кусками кода, которые таковы вероятно потому, что cURL изначально консольное приложение.

POST и GET запросы без cURL

С помощью PHP мы можем отправить простой GET запрос используя функцию file_get_contents.

При помощи file_get_contents мы также можем отправить POST запрос.

Подробнее о том, какие опции можно передавать в stream_context_create, вы можете изучить здесь: http://docs.php.net/manual/ru/context.http.php

Другие инструменты для работы с запросами в PHP

Для работы с запросами есть еще более мощный инструмент: Guzzle

Несколько примеров на Guzzle

GET запросы на Guzzle

Разные типы запросов на Guzzle

Асинхронные запросы на Guzzle

Если интересно, то читайте: Guzzle Quick Start

Пишите комментарии, если что-то осталось непонятно.

Источник

Отправка POST-запросов в cURL

пост запрос php curl. Смотреть фото пост запрос php curl. Смотреть картинку пост запрос php curl. Картинка про пост запрос php curl. Фото пост запрос php curl

Вот мы и переходим к самому соку модуля cURL. Эта статья очень важная и знания, которые Вы получите, будут использоваться в cURL чаще всего. Мы с Вами будем говорить об отправке POST-запросов в cURL.

Прежде чем отправлять POST-запросы, необходимо определиться, как это будет происходить и что нам для этого нужно. Нам нужно два файла: источник и приёмник. Соответственно, в источнике мы будем отправлять POST-запрос через cURL на приёмник. Приёмник будет этот запрос обрабатывать, а источник с помощью cURL примет результат этой обработки. Надеюсь, что здесь всё понятно. Теперь о том, что будет отправляться и что будет происходить. Отправляться источником будут два числа. А приёмник будет считать сумму двух чисел, пришедших через POST-запрос. В результате, сумма двух чисел вернётся от приёмника к источнику, а далее мы это число просто распечатаем.

Итак, давайте начнём с кода для файла-приёмника («receiver.php«):

Здесь всё очень просто: записываем в переменные $a и $b данные из POST-запроса, а дальше выводим их сумму.

Теперь создадим файл-источник:

Опция CURLOPT_POST имеет значение true, что означает, что данные передаются методом POST. А в опции CURLOPT_POSTFIELDS содержится уже строка с передаваемыми данными. Если Вы запустите этот скрипт, то увидите число «11«, что и предполагалось (4+7).

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

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

P.S. Всех дам поздравляю с 8-м марта! Желаю всегда оставаться красивыми, жизнерадостными и иметь рядом с собой достойного мужчину!

пост запрос php curl. Смотреть фото пост запрос php curl. Смотреть картинку пост запрос php curl. Картинка про пост запрос php curl. Фото пост запрос php curl

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 23 ):

Спасибо за статью, полезно. Только вопрос: что делать если на странице есть ссылки типа scr=/folder/img.jpg?

Написать скрипт, которые заменяет относительные пути абсолютными.

Спасибо, в принципе так и думал, но хотел узнать нет ли встроенного решения у curl.

Такая ссылка неправильная. Надо писать test1.ru/res.php

Если checkbox не отмечен, то его и передавать не нужно, а вообще на сайтах иногда ставят защиту от таких дел. Например, требуют, чтобы клиентом был браузер, а не какой-то скрипт, требует, чтобы реферер стоял с их формы и ещё много, чего могут придумать. Также все эти сообщения выводят, как правило, из сессий, а в Вашем скрипте сессий нет, поэтому когда появляется страница в браузере, то, разумеется, ничего и не выводится.

Спасибо, попробую насчет сессий. Но я вот что не понял: разве в заголовке не должны хранится все параметры то есть данные Post, cookie, session? а то мне выводят вот что. HTTP/1.1 200 OK Server: nginx/1.1.8 Date: Sun, 25 Nov 2012 07:01:39 GMT Content-Type: text/html; charset=windows-1251 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: no-cache, no-store, must-revalidate, max-age=0 Pragma: no-cache Expires: 0 Last-Modified: Sun, 25 Nov 2012 07:01:39 GMT X-UA-Compatible: IE=edge Set-Cookie: user_id=1ej5m1CxwlNVxoX3GHdcAg==; expires=Mon, 25-Nov-13 07:01:39 GMT; domain=(***); path=/ то есть инфа только о coockies, не пойму где посмотреть сессии и request параметры

Сессии не хранятся в заголовках, они в файлах лежат на сервере. А в cookie только идентификатор, возможно, user_id это он и есть.

Отличная статья коротко и понятно! Подскажите,как можно сделать,чтобы передаваемые данные из файла ‘источник’ в файл ‘приемник’ обработанные данные не возвращались обратно в файл ‘источник’.

Назвать источник можно как угодно.

Приятно писать комментарии, задавать вопросы и знать,что на них всегда ответят! Спасибо,Михаил!

Да, с помощью cURL можно отправить GET или POST запрос с нужной переменной.

Надо в curl_init указать путь к файлу.

Все равно возвращаются, только к числу 11 добавляется через пробел число 1, а в файле приемнике в любом случае выводится 0.

irin, У меня тоже был ноль, заработало после того, как изменил адрес файла-приёмника в файле-источнике: с ‘receiver.php’ на ‘http://domain/receiver.php’ У меня файл лежит в: Z:\home\domain\www\receiver.php То есть нужно указать: ‘http://»имя вашей папки»/»имя вашего файла-приёмника»‘.

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

cURL запросы в php

cURL — очень мощный инструмент, который позволяет передавать данные с помощью различных протоколов. Очень часто его используют для передачи данных между веб-сайтами. Как пример таких запросов можно привести взаимодействие с API или oAuth.
сURL безграничен в своих возможностях, начиная от базовых HTTP запросов, продолжая передачей данных через протокол FTP и т.д. Список протоколов, с которыми работает cURL: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP.

В этой статье мы рассмотрим разницу между передачей запроса методом GET и POST, разберем как работать с ответом и рассмотрим несколько частно используемых параметров

Основы

Настройки

Параметры cURL нужны для того, чтобы более точно сконфигурировать Ваш запрос. С помощью параметров можно получить те самые, почти безграничные, возможности работы с запросами.

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

ПараметрОписание
CURLOPT_RETURNTRANSFERВозвращает ответ как строку (если передать true), вместо вывода на экран
CURLOPT_CONNECTTIMEOUTПозволяет задать количество секунд для ожидания соединения.
CURLOPT_TIMEOUTЗадает количество секунд, которые будет выполняться запрос.
CURLOPT_USERAGENTСодержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе.
CURLOPT_URLURL, куда будет отправлен запрос.
CURLOPT_POSTtrue, если нужно отправить POST запрос
CURLOPT_POSTFIELDSМассив параметров для POST запроса

Как задавать параметры

Пример 1: Установим значение URL, куда будет отправлен запрос:

К слову, установить этот параметр можно в одну строку при инициализации ресурса:

Пример 2: Установим время выполнения запроса в 10 секунд:

Альтернативный способ задавать настройки

Отправка запроса cURL

Как написано выше, при помощи cURL можно отправлять различные запросы. В данной статье мы рассмотрим варианты отправки GET и POST запросов.

Отправить GET запрос

GET запрос используется по умолчанию. Как вы увидите в примере ниже, он достаточно прост для понимания.

Если есть необходимость использовать параметры, их можно просто перечислить в url: http://testsite.com/?param=value&param2=value2

Отправим простой GET запрос с параметрами:

Отправка POST запроса

Синтаксис для GET и POST запросов немного отличается. В случае, если запрос не содержит параметров, разница будет только в параметре CURLOPT_POST (в POST этот параметр устанавливаем в true или 1). Если необходимо передавать параметры POST запроса, дополнительно указываем параметр CURLOPT_POSTFIELDS (массив, где название параметра — ключ массив).

В данном примере отправляется тот-же запрос, который рассматривался в выше, отличается лишь метод отправки.

Завершение запроса

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

Давайте рассмотрим реальный пример отправки cURL запроса на языке php. Предлагаю подключиться к публичному API приватбанка и узнать курс валют на сегодня:

Код для этого примера будет выглядеть примерно следующим образом:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *