Curl setopt curlopt returntransfer

PHP поддерживает libcurl, библиотеку, созданную Daniel"ом Stenberg"ом, которая даёт возможность соединяться с серверами различных типов и по разным протоколам.
libcurl в настоящее время поддерживает протоколы http, https, ftp, gopher, telnet, dict, file и ldap.
libcurl также поддерживает сертификаты HTTPS, HTTP POST, HTTP PUT, загрузку по FTP (это можно сделать также РНР-расширением ftp), загрузку на основе форм HTTP, прокси, куки и аутентификацию user+password.

Эти функции были введены в PHP 4.0.2.

curl_init

curl_init — инициализирует CURL-сессию.

Описание

resource curl_init([string url])

Функция curl_init() инициализирует новую сессию и возвратит CURL-дескриптор для использования в функциях curl_setopt(), curl_exec() и curl_close(). Если необязательный параметр url предоставлен, то опция CURLOPT_URL получит значение этого параметра. Вы можете вручную устанавливать его с помощью функции curl_setopt().

curl_setopt

curl_setopt — устанавливает опции для CURL-трансфера/transfer.

Описание

bool curl_setopt (resource ch, string option, mixed value)

Функция curl_setopt() устанавливает опции для CURL-сессии, идентифицируемой параметром ch. Параметр option является опцией, которую вы хотите установить, а value это значение опции option.

Параметр value должен быть long для следующих опций (специфицированных параметром option):

  • CURLOPT_INFILESIZE: Если вы выгружаете файл на удалённый сайт, эта опция должна использоваться, для того чтобы сообщит PHP, какой будет ожидаемый размер infile.
  • CURLOPT_VERBOSE: Установите эту опцию в ненулевое значение, если вы хотите, чтобы CURL сообщала обо всех действиях.
  • CURLOPT_HEADER: Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header включалась в вывод.
  • CURLOPT_NOPROGRESS: Установите эту опцию в ненулевое значение, если вы не хотите, чтобы PHP выводил индикатор процесса CURL-трансфера. (PHP автоматически устанавливает эту опцию в ненулевое значение, изменять её необходимо лишь при отладке.)
  • CURLOPT_NOBODY: Установите эту опцию в ненулевое значение, если вы не хотите, чтобы тело/body включалось в вывод.
  • CURLOPT_FAILONERROR: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP завершал работу скрыто, если возвращаемый HTTP-код имеет значение выше 300. По умолчанию страница возвращается нормально с игнорированием кода.
  • CURLOPT_UPLOAD: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP подготавливал файл к выгрузке.
  • CURLOPT_POST: Установите эту опцию в ненулевое значение, если вы хотите, чтобы PHP выполнял регулярный HTTP POST. Этот POST имеет нормальный вид application/x-www-form-urlencoded, чаще всего используемый HTML-формами.
  • CURLOPT_FTPLISTONLY: Установите эту опцию в ненулевое значение, и PHP будет выводит листинг имён FTP-директории.
  • CURLOPT_FTPAPPEND: Установите эту опцию в ненулевое значение, и PHP будет присоединять к удалённому/remote файлу, вместо его перезаписи.
  • CURLOPT_NETRC: Установите эту опцию в ненулевое значение, и PHP будет сканировать ваш файл

./netrc с целью поиска ваших username и password для удалённого сайта, с которым вы устанавливаете соединение.

  • CURLOPT_FOLLOWLOCATION: Установите эту опцию в ненулевое значение, чтобы следовать любому "Location: " header, который сервер высылает как часть HTTP header"а (заметьте, что это рекурсия, PHP будет следовать за всеми "Location: "-header"ами, которые высылаются.)
  • CURLOPT_PUT: Установите эту опцию в ненулевое значение, чтобы HTTP PUT файл. Файл для PUT обязан быть установлен с помощью CURLOPT_INFILE и CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Установите эту опцию в ненулевое значение, и PHP будет работать скрыто в отношении CURL-функций.
  • CURLOPT_TIMEOUT: Передаёт long как параметр, который содержит максимальное время в секундах, которое вы отводите для работы CURL-функций.
  • CURLOPT_CONNECTTIMEOUT: Передаёт long как параметр, который содержит максимальное время в секундах, которое вы отводите для ожидания при попытке подключения. Используйте 0 чтобы ждать бесконечно.
  • CURLOPT_LOW_SPEED_LIMIT: Передаёт long как параметр, который содержит скорость трансфера в байтах в секунду, ниже которого трансфер должен работать в процессе выполнения CURLOPT_LOW_SPEED_TIME, в секундах, чтобы PHP считал его слишком медленным и прерывал его.
  • CURLOPT_LOW_SPEED_TIME: Передаёт long как параметр, который содержит время в секундах, ниже которого трансфер должен работать в процессе выполнения CURLOPT_LOW_SPEED_LIMIT, чтобы PHP считал его слишком медленным и прерывал его.
  • CURLOPT_RESUME_FROM: Передаёт long как параметр, который содержит смещение в байтах, с которого трансфер должен стартовать.
  • CURLOPT_SSLVERSION: Передаёт long как параметр, который содержит используемую версию SSL (2 или 3). По умолчанию PHP пытается определить это сам, хотя в некоторых случаях вы обязаны устанавливать это вручную.
  • CURLOPT_SSL_VERIFYHOST: Передаёт long, если CURL должна проверять Common-имя peer-сертификата в SSL handshake/"рукопожатие". Значение 1 указывает, что мы должны проверить существование общего /common имени, значение 2 указывает, что мы должны убедиться в совпадении с предоставленным hostname.
  • CURLOPT_TIMECONDITION: Передаёт long как параметр, который определяет, как рассматривается CURLOPT_TIMEVALUE. Вы можете установить этот параметр для TIMECOND_IFMODSINCE или TIMECOND_ISUNMODSINCE. Это действует только для HTTP.
  • CURLOPT_TIMEVALUE: Передаёт long как параметр, который является временем в секундах, прошедшим после 1 января 1970. Это время используется, как специфицировано опцией CURLOPT_TIMEVALUE, или по умолчанию будет использоваться TIMECOND_IFMODSINCE.
  • CURLOPT_RETURNTRANSFER: Передаёт ненулевое значение, если вы хотите, чтобы CURL непосредственно возвращала полученную информацию, вместо её печати напрямую.
  • Читайте также:  Установить номер мобильного телефона

    Параметр value должен быть строкой для следующих значений параметра option:

    • CURLOPT_URL: Это URL, который PHP должен получать. Вы можете также устанавливать эту опцию при инициализации сессии функцией curl_init().
    • CURLOPT_USERPWD: Передаёт в РНР строку, отформатированную в виде [username]:[password], для использования при соединении.
    • CURLOPT_PROXYUSERPWD: Передаёт в РНР строку, отформатированную в виде [username]:[password], для соединения с HTTP-прокси.
    • CURLOPT_RANGE: Передаёт специфицированный вами диапазон. Он должен быть в формате "X-Y", где X или Y могут отсутствовать. HTTP-трансферы поддерживают также различные интервалы, разделённые запятыми, как, например, X-Y,N-M.
    • CURLOPT_POSTFIELDS: Передаёт строку, содержащую полные данные для передачи операцией HTTP "POST".
    • CURLOPT_REFERER: Передаёт строку, содержащую "referer/ссылающийся" header, используемый в HTTP-запросе.
    • CURLOPT_USERAGENT: Передаёт строку, содержащую "user-agent" header, используемый в HTTP-запросе.
    • CURLOPT_FTPPORT: Передаёт строку, содержащую значение, которое будет использоваться для получения IP-адреса для инструкции ftp "POST". POST-инструкция указывает удалённому серверу: соединиться со специфицированным IP-адресом. Строка может быть обычным IP-адресом, hostname/именем хоста, именем сетевого интерфейса (под UNIX), или просто обычным "-", используемым для системного IP-адреса по умолчанию.
    • CURLOPT_COOKIE: Передаёт строку с содержимым куки/cookie, установленным в HTTP header"е.
    • CURLOPT_SSLCERT: Передаёт строку, содержащую filename форматированного сертификата PEM.
    • CURLOPT_SSLCERTPASSWD: Передаёт строку, содержащую password, необходимый для работы сертификата CURLOPT_SSLCERT.
    • CURLOPT_COOKIEFILE: Передаёт строку, содержащую имя файла с данными куки. Этот cookie-файл может иметь формат Netscape, или содержать обычные шапки/headers в HTTP-стиле, забитые в файл.
    • CURLOPT_CUSTOMREQUEST: Передаёт строку, используемую вместо GET или HEAD при выполнении HTTP-запроса. Это делается для выполнения DELETE или других, более скрытых HTTP-запросов. Верными значениями являются GET, POST и так далее; то есть не вводите здесь полную строку HTTP-запроса. Например, ввод "GET /index.html HTTP/1.0" будет некорректным. (не делайте это, если не уверены, что ваш сервер поддерживает эту команду.)
    • CURLOPT_PROXY: Передаёт имя HTTP-прокси туннельным запросам.
    • CURLOPT_INTERFACE: Передаёт имя исходящего сетевого интерфейса для использования. Это может быть имя интерфейса, IP-адрес или имя хоста. ( curl_setopt($ch, CURLOPT_INTERFACE, $extip) )
    • CURLOPT_KRB4LEVEL: Передаёт KRB4 (Kerberos 4) уровень секретности. Это любая из следующих строк (в порядке от менее до более мощной): "clear", "safe", "confidential", "private".
      Если эта строка не совпадает с какой-либо из указанных, то используется "private". Если вы установите здесь NULL, это отключит KRB4-безопасность. KRB4-безопасность работает в настоящее время только с транзакциями FTP.
    • CURLOPT_HTTPHEADER: Передаёт массив полей HTTP-header"а для установки.
    • CURLOPT_QUOTE: Передаёт массив FTP-команд для выполнения на сервере до выполнения FTP-запроса.
    • CURLOPT_POSTQUOTE: Передаёт массив FTP-команд для выполнения на сервере после выполнения FTP-запроса.

    Следующие опции ожидают дескриптора файла, который получается с помощью функции fopen():

    • CURLOPT_FILE: Файл, куда должен быть помещён вывод вашего трансфера, по умолчанию это STDOUT.
    • CURLOPT_INFILE: Файл, из которого приходит ввод вашего трансфера.
    • CURLOPT_WRITEHEADER: Файл для записи header-части вывода.
    • CURLOPT_STDERR: Файл для записи ошибок, вместо stderr.

    Параметр value должен быть функцией следующего вида long write_callback (resource ch, string data) для следующих значений параметра option:

    • CURLOPT_WRITEFUNCTION: .
    • CURLOPT_HEADERFUNCTION: .

    Параметр value должен быть функцией следующего вида string read_callback (resource ch, resource fd, long length)<> для следующих значений параметра option:

    (PHP 4 >= 4.0.2, PHP 5)

    curl_setopt — Устанавливает параметр для сеанса CURL

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

    Функция curl_setopt() Устанавливает параметр для сеанса CURL, заданного аргументом ch . Аргумент option задает устанавливаемый параметр, а value — его значение.

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

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

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

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

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

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

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

    Читайте также:  Приставка для цифрового телевидения на старый телевизор

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

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

    CURLOPT_POST : При установке этого параметра в ненулевое значение будет отправлен HTTP запрос методом POST типа application/x-www-form-urlencoded , используемый браузерами при отправке форм.

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

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

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

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

    CURLOPT_PUT : При установке этого параметра в ненулевое значение, будет производиться закачка файла методом HTTP PUT. Файл задается параметрами CURLOPT_INFILE и CURLOPT_INFILESIZE .

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

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

    CURLOPT_LOW_SPEED_LIMIT : Задает минимальную скорость передачи в байтах в секунду. Если в течении времени, заданного параметром CURLOPT_LOW_SPEED_TIME , скорость передачи будет меньше этого значения, операция будет прервана.

    CURLOPT_LOW_SPEED_TIME : Задает время в секундах, в течение которого скорость передачи должна быть ниже, чем CURLOPT_LOW_SPEED_LIMIT , чтобы операция была признана слишком медленной и прервана.

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

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

    CURLOPT_SSL_VERIFYPEER : Установите этот параметр в ноль, чтобы запретить проверку сертификата удаленного сервера (начиная с curl 7.10, по умолчанию этот параметр имеет значение TRUE ). Дополнительные сертификаты можно задать с помощью параметра CURLOPT_CAINFO (добавленного в in curl 7.9.8). Можно также указать путь к файлам сертификатов в параметре CURLOPT_CAPATH . Если CURLOPT_SSL_VERIFYPEER установлен в 0, возможно, также потребуется установить CURLOPT_SSL_VERIFYHOST в 1 или 0 (по умолчанию 2).

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

    CURLOPT_SSL_VERIFYHOST : Задает проверку имени, указанного в сертификате удаленного сервера, при установлении SSL соединения. Значение 1 означает проверку существования имени, значение 2 — кроме того, и проверку соответствия имени хоста.

    CURLOPT_TIMECONDITION : Задает способ интерпретации значения параметра CURLOPT_TIMEVALUE . Возможные значения: TIMECOND_IFMODSINCE или TIMECOND_ISUNMODSINCE. Применяется только для протокола HTTP.

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

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

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

    CURLOPT_URL : URL, с которым будет производиться операция. Значение этого параметра также может быть задано в вызове функции curl_init() .

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

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

    CURLOPT_RANGE : Задает участок файла, который нужно загрузить, в формате "X-Y" , причем X или Y могут быть опущены. Протокол HTTP также поддерживает передачу нескольких фрагментов файла, это задается в виде "X-Y,N-M".

    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_SSLCERTPASSWD : Пароль к файлу сертификата, заданному параметром CURLOPT_SSLCERT .

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

    CURLOPT_CUSTOMREQUEST : Задает специальный метод, который будет использован в HTTP запросе вместо GET или HEAD . Это используется для отправке запросов DELETE или других, редко используемых. Допустимыми зачениями являются GET , POST , и т.д; не передавайте полный HTTP запрос в этом параметре. Например, ‘GET /index.html HTTP/1.0

    Читайте также:  Проблема со звуком в видео

    ‘ недопустимо.

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

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

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

    CURLOPT_KRB4LEVEL : Уровень безопасности KRB4 (Kerberos 4). Допустимы следующие значения (в порядке возрастания безопасности) : ‘clear’, ‘safe’, ‘confidential’, ‘private’. Если переданное значение не входит в этот список, используется ‘private’. Установка этого параметра в NULL , запрещает безопасность KRB4 . В настоящее время безопасность KRB4 поддерживается только для протокола FTP.

    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 ();

    // установка URL и других необходимых параметров
    curl_setopt ( $ch , CURLOPT_URL , "http://www.example.com/" );
    curl_setopt ( $ch , CURLOPT_HEADER , 0 );

    // загрузка страницы и выдача её браузеру
    curl_exec ( $ch );

    Сегодня, этим сонным летним утром, я расскажу вам про SSL соединение из PHP скрипта. Расскажу исходя не только лишь из теории, а ещё и решая вполне себе практическую задачу — логин на гугловский блогосервис blogger.com.

    Начнём с сокетов. В хелпе заявлена возможность использования HTTPS протокола, поэтому пробуем. Набор POST переменных взят из developer’s guide. Хабрапарсер обрамляет мыло ссылкой, поэтому "@" заменена на (at).

    В функции fsockopen в качестве префикса перед именем сервера используем не https, а ssl. Так прямым текстом написано в хелпе. Дальше всё просто. Формируем HTTP-header, и пихаем его в открытый сокет. Читаем ответ, и получаем

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

    UPD. Огромное спасибо хабраюзеру anabolik, который подсказал что если изменить одну строку заголовка и сделать
    $send .= "Content-type: application/x-www-form-urlencoded
    ";
    то всё сразу заработает. Ещё раз спасибо. Отблагодарил всякими способами =).

    Переходим ко второму способу.

    Открываем страницу мана про cURL и радуемся. Столько возможностей для запросов, для всякого конфигурирования. Должно получиться. Итак, лезем в curl_setopt. Нам понадобятся
    CURLOPT_URL — это URL запроса.
    CURLOPT_POST — говорим, что будем посылать POST запрос.
    CURLOPT_POSTFIELDS — собственно POST переменыые.
    CURLOPT_RETURNTRANSFER — вернуть результат запроса, а не выводить в браузер.

    Теперь собственно о SSL параметрах:
    CURLOPT_SSL_VERIFYPEER — если поставить его в 0, то удалённый сервер не будет проверять наш сертификат. В противном случае необходимо этот самый сертификат послать.
    CURLOPT_CAINFO — указывать файл сертификата, если CURLOPT_SSL_VERIFYPEER установлен в 1.
    CURLOPT_SSLVERSION — целое число, указывает версию SSL (2 или 3), обычно определяется автоматически.
    CURLOPT_SSL_VERIFYHOST — будет ли производиться проверка имени удалённого сервера, указанного в сертификате. Если установить значение «2», то будет произведена ещё и проверка соответствия имени хоста. (если честно, я так и не понял что делает этот флаг)

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

    $postvars = array(
    "Email" => "mail(at)gmail.com",
    "Passwd" => "pass",
    "service" => "blogger"
    );

    $postdata = "";
    foreach ( $postvars as $key => $value )
    $postdata .= "&".rawurlencode($key)."=".rawurlencode($value);
    $postdata = substr( $postdata, 1 );

    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec ($ch);
    curl_close($ch);

    В переменной $result у нас теперь находятся три строки, из которых нужна только одна — последняя, которая начинается с «Auth=». Но про это, наверное, в следующий раз.