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.