Curlopt cookie: How can I send cookies using PHP curl in addition to CURLOPT_COOKIEFILE?

BE_CurlSetOption — поддержка подключаемого модуля BaseElements

Задает одну из необязательных переменных библиотеки Curl, которые используются во всех функциях HTTP. Стоимость зависит от типа опциона. Некоторым требуются явные значения (например, CURLOPT_USERAGENT), а другим требуется флаг. Полный список параметров и их возможных значений находится в документации curl здесь: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html.

Восстановление всех значений по умолчанию можно выполнить с помощью

BE_CurlSetOption

Чтобы вернуть параметру значение по умолчанию, вызовите имя параметра без параметра:

BE_CurlSetOption («CURLOPT_HTTPAUTH»)

Параметры CURLOPT_HTTPAUTH и CURLOPT_PROXYAUTH также могут быть установлены с помощью констант:

CURLAUTH_BASIC

CURLAUTH_DIGEST

CURLAUTH_DIGEST_IE

CURLAUTH_NEGOTIATE

CURLAUTH_NTLM

CURLAUTH_NTLM_WB

CURLAUTH_ANY

CURLAUTH_ANYSAFE

CURLAUTH_ONLY

Проверка подлинности сертификата:

Чтобы использовать сертификаты для аутентификации SSL, вы должны сделать:

BE_CurlSetOption («CURLOPT_SSLCERT»; «/path/to/cert. pem»)

BE_CurlSetOption («CURLOPT_SSLCERTTYPE»; «PEM»)

BE_CurlSetOption («CURLOPT_SSLKEY»; «/path/to/key.pem»)

BE_CurlSetOption («CURLOPT_SSLKEYTYPE»; «PEM»)

«PEM» является типом по умолчанию, поэтому его можно не указывать. Другими возможными вариантами типов являются «PEM», «DER» или «P12» для файлов с кодировкой PKCS#12. (дополнительные примечания: файлы PEM, которые будут работать с curl при выполнении SFTP, являются файлами PRIVATE KEY RSA. Вы можете открыть их в текстовом редакторе, и вы должны увидеть эту строку в начале. Если вместо этого написано OPENSSH PRIVATE KEY, это может не работать. Вы можете конвертируйте ключи, используя эти инструкции: https://federicofr.wordpress.com/2019/01/02/как-конвертировать-openssh-приватные-ключи-в-rsa-pem/ )

Использование файлов cookie:

Чтобы разрешить curl сохранять и повторно использовать файлы cookie, установите файл cookie (для того, где их хранить) и файл cookie (для того, чтобы прочитать их для отправки).

BE_CurlSetOption («CURLOPT_COOKIEFILE»; «/path/to/cookieFile.txt»)

BE_CurlSetOption («CURLOPT_COOKIEJAR»; «/path/to/cookieFile.txt» )

Вы можете использовать временную папку для хранения файлов cookie, но вам потребуется преобразовать результат Get ( TemporaryPath ) в плагин https://docs.baseelementsplugin.com/article/514-notes-about-file-paths. сначала погладить.

Аутентификация Amazon:

Теперь для сложного метода аутентификации AWS есть собственная опция с использованием опции CURLOPT_AWS_SIGV4. Кажется, требуется строка, соответствующая либо «provider1:provider2», либо «provider1:provider2:region:service», и вы устанавливаете ключи через CURLOPT_USERPWD и «MY_ACCESS_KEY:MY_SECRET_KEY». Подробнее см. здесь:

https://curl.se/libcurl/c/CURLOPT_AWS_SIGV4.html

Полный список поддерживаемых параметров CURL:

CURLOPT_PROXY

CURLOPT_NOPROXY

CURLOPT_SOCKS5_GSSAPI_SERVICE

CURLOPT_INTERFACE

CURLOPT_NETRC_FILE

CURLOPT_USERPWD

CURLOPT_PROXYUSERPWD

CURLOPT_USERNAME

CURLOPT_PASSWORD

CURLOPT_PROXYUSERNAME

CURLOPT_PROXYPASSWORD

CURLOPT_TLSAUTH_USERNAME

CURLOPT_TLSAUTH_PASSWORD

CURLOPT_ACCEPT_ENCODING

CURLOPT_COPYPOSTFIELDS

CURLOPT_REFERER

CURLOPT_USERAGENT

CURLOPT_COOKIE

CURLOPT_COOKIEFILE

CURLOPT_COOKIEJAR

CURLOPT_COOKIELIST

CURLOPT_HTTPGET

CURLOPT_MAIL_FROM

CURLOPT_MAIL_AUTH

CURLOPT_FTPPORT

CURLOPT_FTP_ALTERNATIVE_TO_USER

CURLOPT_FTP_ACCOUNT

CURLOPT_RTSP_SESSION_ID

CURLOPT_RTSP_STREAM_URI

CURLOPT_RTSP_TRANSPORT

КУРС_ДИАПАЗОН

CURLOPT_CUSTOMREQUEST

CURLOPT_DNS_SERVERS

CURLOPT_SSLCERT

CURLOPT_SSLCERTTYPE

CURLOPT_SSLKEY

CURLOPT_SSLKEYTYPE

CURLOPT_KEYPASSWD

CURLOPT_SSLENGINE

CURLOPT_CAINFO

CURLOPT_ISSUERCERT

CURLOPT_CAPATH

CURLOPT_CRLFILE

CURLOPT_RANDOM_FILE

CURLOPT_EGDSOCKET

CURLOPT_SSL_CIPHER_LIST

CURLOPT_KRBLEVEL

CURLOPT_SSH_HOST_PUBLIC_KEY_MD5

CURLOPT_SSH_PUBLIC_KEYFILE

CURLOPT_SSH_PRIVATE_KEYFILE

CURLOPT_SSH_KNOWNHOSTS

CURLOPT_VERBOSE

CURLOPT_HEADER

CURLOPT_NOSIGNAL

CURLOPT_WILDCARDMATCH

CURLOPT_FAILONERROR

CURLOPT_PROXYPORT

CURLOPT_PROXYTYPE

CURLOPT_HTTPPROXYTUNNEL

КУРЛОПТ_СОКС5_ГССАПИ_НЭК

CURLOPT_LOCALPORT

CURLOPT_LOCALPORTRANGE

CURLOPT_DNS_CACHE_TIMEOUT // CURLOPT_DNS_USE_GLOBAL_CACHE — удалено в 4. 2.0

CURLOPT_BUFFERSIZE

CURLOPT_PORT

CURLOPT_TCP_NODELAY

CURLOPT_ADDRESS_SCOPE

CURLOPT_TCP_KEEPALIVE

CURLOPT_TCP_KEEPIDLE

CURLOPT_TCP_KEEPINTVL

CURLOPT_NETRC

CURLOPT_HTTPAUTH

CURLOPT_TLSAUTH_TYPE

CURLOPT_PROXYAUTH

CURLOPT_AUTOREFERER

CURLOPT_TRANSFER_ENCODING

CURLOPT_FOLLOWLOCATION

CURLOPT_UNRESTRICTED_AUTH

CURLOPT_MAXREDIRS

CURLOPT_PUT

CURLOPT_POST

CURLOPT_POSTFIELDSIZE

CURLOPT_COOKIESESSION

CURLOPT_HTTP_VERSION

CURLOPT_IGNORE_CONTENT_LENGTH

CURLOPT_HTTP_CONTENT_DECODING

CURLOPT_HTTP_TRANSFER_DECODING

CURLOPT_TFTP_BLKSIZE

CURLOPT_FTPPORT

CURLOPT_DIRLISTONLY

CURLOPT_APPEND

CURLOPT_FTP_USE_EPRT

CURLOPT_FTP_USE_EPSV

CURLOPT_FTP_USE_PRET

CURLOPT_FTP_CREATE_MISSING_DIRS

CURLOPT_FTP_RESPONSE_TIMEOUT

CURLOPT_FTP_SKIP_PASV_IP

CURLOPT_FTPSSLAUTH

CURLOPT_FTP_SSL_CCC

CURLOPT_FTP_FILEMETHOD

CURLOPT_RTSP_REQUEST

CURLOPT_RTSP_CLIENT_CSEQ

CURLOPT_RTSP_SERVER_CSEQ

CURLOPT_TRANSFERTEXT

CURLOPT_PROXY_TRANSFER_MODE

CURLOPT_CRLF

CURLOPT_RESUME_FROM

CURLOPT_FILETIME

CURLOPT_NOBODY

CURLOPT_INFILESIZE

CURLOPT_UPLOAD

CURLOPT_MAXFILESIZE

CURLOPT_TIMECONDITION

CURLOPT_TIMEVALUE

CURLOPT_TIMEOUT

CURLOPT_TIMEOUT_MS

CURLOPT_LOW_SPEED_TIME

CURLOPT_MAXCONNECTS

CURLOPT_FRESH_CONNECT

CURLOPT_FORBID_REUSE

CURLOPT_CONNECTTIMEOUT

CURLOPT_CONNECTTIMEOUT_MS

CURLOPT_IPRESOLVE

CURLOPT_CONNECT_ONLY

CURLOPT_USE_SSL

CURLOPT_ACCEPTTIMEOUT_MS

CURLOPT_SSLENGINE_DEFAULT

CURLOPT_SSLVERSION

CURLOPT_SSL_VERIFYPEER

CURLOPT_SSL_VERIFYHOST

CURLOPT_CERTINFO

CURLOPT_SSL_SESSIONID_CACHE

CURLOPT_GSSAPI_DELEGATION

CURLOPT_SSH_AUTH_TYPES

CURLOPT_NEW_FILE_PERMS

CURLOPT_NEW_DIRECTORY_PERMS

CURLOPT_POSTFIELDSIZE_LARGE

CURLOPT_RESUME_FROM_LARGE

CURLOPT_INFILESIZE_LARGE

CURLOPT_MAXFILESIZE_LARGE

CURLOPT_MAX_SEND_SPEED_LARGE

CURLOPT_MAX_RECV_SPEED_LARGE

Добавлено в 4. 2.0:

 – CURLOPT_CONNECT_TO

 – CURLOPT_TCP_FASTOPEN

 – CURLOPT_KEEP_SENDING_ON_ERROR

 – CURLOPT_SUPPRESS_CONNECT_HEADERS

 – CURLOPT_SOCKS5_AUTH

 – CURLOPT_REQUEST_TARGET

 – CURLOPT_SSH_COMPRESSION

 – CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS

— CURLOPT_DNS_SHUFFLE_ADDRESSES

— ПРОТОКОЛ CURLOPT_HAPROXY

 – CURLOPT_DISALLOW_USERNAME_IN_URL

 – CURLOPT_TLS13_CIPHERS

 – CURLOPT_PROXY_TLS13_CIPHERS

 – CURLOPT_UPLOAD_BUFFERSIZE

 – CURLOPT_DOH_URL

 – CURLOPT_MAXAGE_CONN

 – CURLOPT_MAIL_RCPT_ALLLOWFAILS

 – CURLOPT_PROXY_ISSUERCERT

 – CURLOPT_AWS_SIGV4

Параметры:

— опция: имя устанавливаемой опции.

— значение : значение для установки.

Ключевые слова:

Набор параметров HTTP Curl

История версий:

— 2.1 :

— 3.1: значение опции сделано необязательным и добавлены именованные константы.

— 4. 0.2: переименован из BE_Curl_Set_Option

— 4.2.0 :

Примечания:

Примеры кода:

 BE_CurlSetOption ("CURLOPT_HTTPAUTH"; 1) 

Использовать «Базовую» аутентификацию

 BE_CurlSetOption ("CURLOPT_HTTPAUTH"; "CURLAUTH_BASIC") 

Использовать «Базовую» аутентификацию

 BE_CurlSetOption ("CURLOPT_HTTPAUTH") 

Удалите все предыдущие пользовательские настройки для этого параметра

 BE_CurlSetOption 

Очистить сразу все пользовательские параметры.

Автоматизированный доступ с помощью сценариев — RavenWiki

Raven был разработан для аутентификации пользователей веб-браузера. Однако на практике опытным пользователям, умеющим программировать, особенно системным администраторам, часто требуется автоматизировать рабочие процессы, предполагающие HTTP-доступ к защищенному Raven ресурсу. Хотя существуют обходные пути (см. раздел «Обходной путь» ниже), которые позволяют сценариям обходить экран входа в Raven, они громоздки и ненадежны.

Предложение: WLS для распознавания двух новых файлов cookie

Следующее простое предложение сделать Raven WLS более удобным для сценариев было сделано Маркусом Куном 28 апреля 2010 г. в списке рассылки cs-raven-discuss.

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

Сценарий, пытающийся получить доступ к любому содержимому, защищенному Raven, сначала добавит три файла cookie для https://raven.cl.cam.ac.uk/ в «файл cookie» своего клиентского инструмента/библиотеки HTTP:

  • Ucam-WLS-ID= ваш-crsid
  • Ucam-WLS-Passwd= ваш-ворон-пароль
  • Ucam-WLS-mode=automatic

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

Ucam-WLS-ID уже распознан Raven WLS сегодня. Он заменяет элемент формы логин-имя на странице входа предоставленным значением, так что пользователю не нужно вводить свой crsid. В настоящее время он устанавливается, если пользователь просит https://raven.cam.ac.uk/auth/account/ предварительно заполнить свое имя пользователя в форме пароля.

Ucam-WLS-Passwd эквивалентно позволяет клиенту заранее сообщить Raven пароль, так что Raven не нужно отображать какую-либо интерактивную форму пароля, если предоставлены и Ucam-WLS-ID, и Ucam-WLS-Passwd.

Ucam-WLS-mode=automatic явно сообщает Raven, что клиент является машиной и, следовательно, не заинтересован в каких-либо интерактивных экранах уведомлений или подтверждений, так как он все равно не понимает английскую прозу. Если присутствует Ucam-WLS-mode=automatic, любые новые интерактивные уведомления или подтверждения откладываются до тех пор, пока пользователь не войдет в систему в следующий раз без файла cookie Ucam-WLS-mode=automatic.

Если эти три файла cookie установлены правильно, WLS либо немедленно перенаправит клиента обратно на WAA сервера приложений, откуда он пришел (результирующий код HTTP 302 или 303), либо – если вход не был успешным (неправильный или отсутствующий пароль) – прервать с ошибкой HTTP (403 «Запрещено» кажется подходящим).

Пример

Допустим, вы хотите получить доступ к веб-странице, защищенной Raven, с помощью curl, популярного инструмента командной строки Unix для выполнения HTTP-запросов:

Чтобы безопасно доставить три вышеуказанных файла cookie (т. е. только на https://raven.cam.ac.uk/), создайте файл «/tmp/cookiejar.txt» с содержимым

 raven.cam.ac.uk ЛОЖЬ / ИСТИНА 2147483647 Ucam-WLS-ID  your-crsid 
raven.cam.ac.uk ЛОЖЬ / ИСТИНА 2147483647 Ucam-WLS-Passwd  ваш-ворон-пароль 
raven.cam.ac.uk FALSE / TRUE 2147483647 Ucam-WLS-режим автоматический
 

[Столбцы: домен, совпадение, путь, безопасность, срок действия, имя, значение]

Важно установить флаг «secure» в значение TRUE для Ucam-WLS-Passwd, чтобы этот файл cookie не был случайно отправлен через небезопасное соединение, отличное от HTTPS. Значение «expire» составляет всего 2 31 −1 (19 января 2038 г.), максимальное значение time_t, поддерживаемое на 32-разрядных платформах.

Затем один вызов curl вида

 curl -L -b/tmp/cookiejar.txt -c/tmp/cookiejar.txt ....
 

не только проведет вас мимо Raven, но также оставит в вашей банке cookie файл cookie сеанса приложения, который затем сделает дальнейшие вызовы Raven ненужными (до истечения времени ожидания). Параметр -L заставляет curl автоматически следовать перенаправлениям, параметр -b считывает файл cookie, а параметр -c возвращает обновленный файл cookie.

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

Большинство других инструментов и библиотек сценариев http имеют аналогичные средства для установки файлов cookie и автоматического следования перенаправлениям, и поэтому они в равной степени выиграли бы от этого простого расширения.

Обходной путь

В следующем примере показано, как в настоящее время можно получить доступ к URL-адресу, защищенному Raven, из сценария оболочки и curl. Обратите внимание, что сценарий должен переписать URL-адрес WLS, содержащий состояние сеанса, чтобы заменить страницу входа в систему authentication.html страницей перенаправления authentication2.html. Этот сценарий завершится ошибкой, если после этапа входа появятся какие-либо интерактивные подтверждения или уведомления, или если авторы WLS внесут какие-либо изменения в структуру URL-адреса, поля формы или другие аспекты дизайна сайта.

 #!/бин/баш
# Демонстрация аутентификации Raven в Lookup с помощью curl
# Маркус Кун -- 08.04.2010 -- обновлено 05.10.2019
#
# Использование: login=mgk25 passwd=... ./raven-client-demo
#
# некоторые параметры
# login=mgk25 # ID пользователя Raven, который будет использоваться
# passwd=... # Используемый пароль Raven
url='https://www.lookup.cam.ac.uk/person/crsid/mgk25' # какой-то URL-адрес, который вызывает перенаправление на Raven
#
# место для хранения сессионных куки (секрет)
cookiejar=/tmp/raven-demo-$USER. cookiejar
rm -f $cookiejar ; коснитесь $cookiejar ; chmod go-rwx $cookiejar
#
# сначала запустить, а затем обработать перенаправление Raven
curlopt="-s --output /dev/null -b$cookiejar -c$cookiejar"
# получить перенаправление на форму Raven "authenticate.html" с правильным файлом cookie
redirect1=`curl -w'%{redirect_url}' $curlopt "$url"`
if [ "${redirect1:0:47}" = "https://raven.cam.ac.uk/auth/authenticate.html?" ] ; затем
# заполните форму пароля, зайдя на страницу Raven "authenticate2.html"
redirect2=`curl -w'%{redirect_url}' $curlopt --data userid="$login" --data-urlencode pwd="$passwd" --data submit=Submit "${redirect1/authenticate.html/authenticate2 .html}"`
# теперь следуйте обратному перенаправлению и получите сессию приложения
# файл cookie, подтверждающий наш успешный вход в систему
завиток $curlopt "$redirect2"
фи
# и теперь мы можем приступить к реальной работе...
# Пример 1: загрузить веб-страницу поиска $url
curl -b$cookiejar -c$cookiejar -s "$url"
# Пример 2: загрузите список CRSID в формате CSV, которые являются членами учреждения
учреждение = WOLFC
curl -b$cookiejar -c$cookiejar -s --data sort=crsid --data _action_download_members=Загрузить https://www.