curl setopt array php

curl_setopt_array

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

curl_setopt_array — Устанавливает несколько параметров для сеанса cURL

Описание

Список параметров

Массив ( array ), определяющий устанавливаемые параметры и их значения. Ключи должны быть корректными константами для функции curl_setopt() или их целочисленными эквивалентами.

Возвращаемые значения

Список изменений

Версия Описание
8.0.0 handle теперь ожидает экземпляр CurlHandle ; раньше, ожидался ресурс ( resource ).

Примеры

Пример #1 Инициализация новой сессии cURL и загрузка веб-страницы

// создание нового ресурса cURL
$ch = curl_init ();

Примечания

Смотрите также

User Contributed Notes 9 notes

So something like this will definitely fail. This is because array_merge effectively resets all the keys in the array into running numbers:

In case that you need to read SSL page content from https with curl, this function can help you:

You might be tempted to use array_merge with arrays where CURLOPT constants are the keys, but beware.

([], [ CURLOPT_FOO => «foo» ], [ CURLOPT_BAR => «bar» ]);
?>

Since these constants are numeric, array_merge will happily reindex:

Once upon a time I’ve got an error like «Problem with the SSL CA cert (path? access rights?)». Since what I was doing was pretty much an administrative task with no actual security issues involved, I decided to disallow certificate validation and this is where the most interesting stuff began.

First I did it like this and it worked:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

Next I thought, «But hey, I don’t want any hardcoded stuff here. Let’s use it in a configurable way!». And so I did something like this:

// in configuration
$CURL_OPTIONS = array(CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_SSL_VERIFYHOST => 0);

And I was so happy, there was no error anymore. and do you think I was happy for a long time? If so, then you’re wrong. It stopped giving an error, while it didn’t start to work!

I checked the actual data but they were allright. Then I thought: «Is it the curl_setopt_array() problem? Let’s make it a cycle.» The way it is mentioned in this help, actually.

And. it did not work the same way as with the curl_setopt_array() call. And the data were still allright.

So, if by chance you can’t set CURL options with the curl_setopt_array() call, then now you know what to do and you know it is definitely not you who is to blame.

Источник

curl_share_setopt

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

curl_share_setopt — Установить опции разделяемого обработчика cURL

Описание

Устанавливает опции разделяемого обработчика cURL.

Список параметров

Опция Описание
CURLSHOPT_SHARE Задаёт тип данных, которые необходимо разделять.
CURLSHOPT_UNSHARE Задаёт тип данных, которые больше не надо разделять.
Значение Описание
CURL_LOCK_DATA_COOKIE Разделяет данные cookie.
CURL_LOCK_DATA_DNS Разделяет кеш DNS. Обратите внимание, что если вы используете множественный обработчик cURL, то все добавленные обработчики по умолчанию будут разделять DNS-кеш.
CURL_LOCK_DATA_SSL_SESSION Разделяет идентификаторы сессии SSL, сокращая время, затрачиваемое на подтверждение (handshake) SSL при повторном соединении к тому же самому серверу. Обратите внимание, что идентификаторы сессии SSL будут по умолчанию переиспользоваться тем же самым обработчиком.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Список изменений

Версия Описание
8.0.0 share_handle expects a CurlShareHandle instance now; previously, a resource was expected.

Примеры

Пример #1 Пример использования curl_share_setopt()

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

Источник

Curl setopt array php

Описание bool curl_setopt ( resource ch, string option, mixed value )

Для перечисленных ниже параметров, value должен быть целым числом:

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

CURLOPT_VERBOSE : При установке этого параметра в ненулевое значение cURL будет выводить подробные сообщения о всех производимых действиях.

CURLOPT_HEADER : При установке этого параметра в ненулевое значение результат будет включать полученные заголовки.

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

Замечание: В PHP этот параметр устанавливается в ненулевое значение по умолчнию. Изменять его значение рекомендуется только при отладке.

CURLOPT_NOBODY : При установке этого параметра в ненулевое значение результат не будет включать документ (например, вам нужно получить только заголовки).

CURLOPT_FAILONERROR : При установке этого параметра в ненулевое значение, получение HTTP кода более 300 считается ошибкой.

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

CURLOPT_FTPLISTONLY : При установке этого параметра в ненулевое значение будет получен список файлов в директории FTP сервера.

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

CURLOPT_NETRC : При установке этого параметра в ненулевое значение будет сделана попытка найти имя пользователя и пароль к удаленному серверу в файле

CURLOPT_FOLLOWLOCATION : При установке этого параметра в ненулевое значение, при получении HTTP заголовка «Location: » будет происходить перенаправление на указанный этим заголовком URL (это действие выполняется рекурсивно, для каждого полученного заголовка «Location:»).

CURLOPT_MUTE : При установке этого параметра в ненулевое значение, все сообщения cURL будут подавляться.

CURLOPT_TIMEOUT : Задает масимальное время выполнения операции в секундах.

CURLOPT_RESUME_FROM : Задает позицию в файле в байтах, с которой начнется передача данных.

CURLOPT_SSLVERSION : Целое число, указывающее, какую версию SSL использовать (2 или 3). По умолчанию версия SSL определяется автоматически, но в некоторых случаях требуется явное указание.

CURLOPT_TIMEVALUE : Задает время в секундах с 1 января 1970 г. Это значение будет использовано в соответствии со значением параметра CURLOPT_TIMECONDITION (по умолчанию TIMECOND_IFMODSINCE).

CURLOPT_RETURNTRANSFER : При установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его.

Для перечисленных ниже параметров, value должен быть строкой:

CURLOPT_USERPWD : Стока с именем пользователя и паролем в виде [username]:[password].

CURLOPT_PROXYUSERPWD : Стока с именем пользователя и паролем к HTTP прокси-серверу в виде [username]:[password].

CURLOPT_POSTFIELDS : Строка, содержащая данные для HTTP POST запроса.

CURLOPT_REFERER : Задает значение HTTP заголовка «Referer: «.

CURLOPT_USERAGENT : Задает значение HTTP заголовка «User-Agent: «.

CURLOPT_FTPPORT : Задает значение, которое будет использоваться для определения IP адреса для команды «PORT» протокола ftp. Команда «PORT» сообщает серверу, с каким IP адресом он должен устанавливать соединение. Это может быть IP адрес, имя хоста, имя сетевого интерфейса (под Unix), или просто ‘-‘ для использования IP адреса по умолчанию.

CURLOPT_COOKIE : Содержимое заголовка «Cookie: «, который будет отправлен с HTTP запросом.

CURLOPT_SSLCERT : Имя файла с сертификатом в формате PEM.

CURLOPT_COOKIEFILE : Имя файла, содержащего данные cookie. Данные могут быть либо в формате Netscape, либо просто HTTP-заголовки.

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

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

CURLOPT_INTERFACE : Имя используемого сетевого интерфейса. Может быть именем интерфейса, IP адресом или именем хоста.

CURLOPT_HTTPHEADER : Массив с HTTP заголовками.

CURLOPT_QUOTE : Массив с FTP командами, которые будут выполнены перед выполнением основного запроса.

CURLOPT_POSTQUOTE : Массив с FTP командами, которые будут выполнены после выполнения основного запроса.

Для перечисленных ниже параметров, value должен быть дескриптором файла, возвращенным функцией fopen() :

CURLOPT_FILE : Файл, в который будет выведен результат операции. По умолчанию STDOUT.

CURLOPT_INFILE : Файл, содержащий данные для передачи.

CURLOPT_WRITEHEADER : Файл, в который будут выведены полученные заголовки.

CURLOPT_STDERR : Файл, в который будут выводиться сообщения об ошибках. По умолчанию STDERR.

Пример 1. Инициализация сеанса CURL и загрузка web-страницы

// инициализация сеанса
$ch = curl_init ();

Источник

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

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

Источник

Posting an array with curl_setopt

The attached code is returning «Notice: Array to string conversion in. «. Simply my array is being handled to the remote server as a string containing «Array» word. the rest of the variables are fine.

5 Answers 5

The full data to post in a HTTP «POST» operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ‘;type=mimetype’. This parameter can either be passed as a urlencoded string like ‘para1=val1&para2=val2&. ‘ or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, value must be an array if files are passed to this option with the @ prefix.

The following statement:

takes an array of POST parameters and for each of them there must be a string name and a STRING value. You are passing an array value instead, so the PHP processor is forced to convert it to a string using some lame built-in algorithm, which incurs issuance of the before-mentioned notice («Array to string conversion in. «).

So, in order to properly pass that array ($anarray) to the other side, you have to take care of its encoding (into a string) yourself, as well as the other side has to take care of its decoding (from a string).

My approach in such situations is JSON. It is suitable enough in almost all cases. All you have to do is apply the following technique:

And then, on the other side of the connection you would retrieve the original array the following way:

Источник

Читайте также:  запоры при беременности 2 триместр что кушать
Образовательный портал