Php basic authorization curl: rest — How do I make a request using HTTP basic authentication with PHP curl?
Содержание
Получение данных PHP cURL (curl_init, curl_setopt)
Примеры использования cURL в PHP
Содержание:
- GET запрос с помощью Curl
- GET-запрос Curl с параметрами
- Curl POST запрос
- Отправка CURL JSON через POST-запрос
- CURL PUT запрос
- CURL DELETE запрос
- CURL запрос через proxy
- Отправка файлов на другой сервер через CURL
- Отправка несколько файлов на другой сервер с помощью библиотеки Curl
- CURL отправка файла методом PUT (так загружаются файлы в REST API)
- Скачивание файлов CURLOPT_FILE
- Отправить и получить cookie через curl
- Имитация браузера через CURLOPT_HTTPHEADER
- HTTP авторизация через PHP CURL
- Получить HTTP код ответа сервера на PHP
- Загрузка через FTP с помощью cURL
Примеры использования cURL для реализации программных модулей при создании сайтов.
PHP библиотека cURL – предназначена для получения и передачи данных через протоколы: HTTP, FTP, HTTPS. Библиотека cURL и ее расширение для PHP libcURL — полезный инструмент при решении имитации запросов веб браузеров. В данной статье рассмотрим несколько практических применений PHP cURL.
Параметры Curl — curl_setopt
- CURLOPT_RETURNTRANSFER — вернуть ответ в виде строки, вместо того, чтобы показывать его сразу
- CURLOPT_CONNECTTIMEOUT — сколько по времени ждать ответа
- CURLOPT_TIMEOUT — сколько секунд будет выполняться cURL запрос
- CURLOPT_USERAGENT — headers (заголовки) для запроса
- CURLOPT_URL — URL куда будет отправлен запрос
- CURLOPT_POST — отправить POST запрос
- CURLOPT_POSTFIELDS — массив POST полей к запросу
GET запрос с помощью Curl
GET-запрос Curl с параметрами
Curl POST запрос
Отправка CURL JSON через POST-запрос
CURL PUT запрос
CURL DELETE запрос
CURL запрос через proxy
Отправка файлов на другой сервер через CURL
Отправка несколько файлов на другой сервер с помощью библиотеки Curl
CURL отправка файла методом PUT (так загружаются файлы в REST API)
Скачивание файлов CURLOPT_FILE
Пример позволяет сохранить результат в файл, указав указатель на открытый файл в параметре CURLOPT_FILE.
Второй вариант скачивания файла:
Отправить и получить cookie через curl
Чтобы сохранить куки в файле достаточно прописать путь в параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.
Передать значение cookie через параметр CURLOPT_COOKIE
Имитация браузера через CURLOPT_HTTPHEADER
На многих сайтах существует защита от получения данных скриптом. Такая защита основана на том что браузер передает серверу заголовки: user agent, referer, cookie. Сервер проверяет эти данные и если он не попадают под фильтр — возвращает страницу сайта. При обычном подключение php curl эти данные не передаются и для этого нужно в параметрах добавить заголовки:
HTTP авторизация через PHP CURL
Basic Authorization
Если на сервере настроена HTTP авторизация, например с помощью .htpasswd, подключится к нему можно с помощью параметра CURLOPT_USERPWD.
OAuth авторизация
Получить HTTP код ответа сервера на PHP
Загрузка через FTP с помощью cURL
Помогла ли вам статья?
360
раз уже помогла
Комментарии: (0)
HTTP-интерфейс | ClickHouse Docs
HTTP интерфейс позволяет использовать ClickHouse на любой платформе, из любого языка программирования. У нас он используется для работы из Java и Perl, а также из shell-скриптов. В других отделах HTTP интерфейс используется из Perl, Python и Go. HTTP интерфейс более ограничен по сравнению с родным интерфейсом, но является более совместимым.
По умолчанию clickhouse-server
слушает HTTP на порту 8123 (это можно изменить в конфиге).
Если запросить GET /
без параметров, то вернётся строка заданная с помощью настройки http_server_default_response. Значение по умолчанию «Ok.» (с переводом строки на конце).
$ curl 'http://localhost:8123/'
Ok.
Веб-интерфейс доступен по адресу: http://localhost:8123/play
.
В скриптах проверки доступности вы можете использовать GET /ping
без параметров. Если сервер доступен, всегда возвращается «Ok.» (с переводом строки на конце).
$ curl 'http://localhost:8123/ping'
Ok.
Запрос отправляется в виде URL параметра с именем query
. Или как тело запроса при использовании метода POST.
Или начало запроса в URL параметре query, а продолжение POST-ом (зачем это нужно, будет объяснено ниже). Размер URL ограничен 16KB, это следует учитывать при отправке больших запросов.
В случае успеха возвращается код ответа 200 и результат обработки запроса в теле ответа, в случае ошибки — код ответа 500 и текст с описанием ошибки в теле ответа.
При использовании метода GET выставляется настройка readonly. То есть, для запросов, модифицирующих данные, можно использовать только метод POST. Сам запрос при этом можно отправлять как в теле POST запроса, так и в параметре URL.
Примеры:
$ curl 'http://localhost:8123/?query=SELECT%201'
1$ wget -nv -O- 'http://localhost:8123/?query=SELECT 1'
1$ echo -ne 'GET /?query=SELECT%201 HTTP/1.0\r\n\r\n' | nc localhost 8123
HTTP/1.0 200 OK
Date: Wed, 27 Nov 2019 10:30:18 GMT
Connection: Close
Content-Type: text/tab-separated-values; charset=UTF-8
X-ClickHouse-Server-Display-Name: clickhouse. ru-central1.internal
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}1
Как видно, curl
немного неудобен тем, что надо URL-эскейпить пробелы.
Хотя wget
сам всё эскейпит, но его не рекомендуется использовать, так как он плохо работает по HTTP 1.1 при использовании keep-alive
и Transfer-Encoding: chunked
.
$ echo 'SELECT 1' | curl 'http://localhost:8123/' --data-binary @-
1$ echo 'SELECT 1' | curl 'http://localhost:8123/?query=' --data-binary @-
1$ echo '1' | curl 'http://localhost:8123/?query=SELECT' --data-binary @-
1
Если часть запроса отправляется в параметре, а часть POST запросом, то между этими двумя кусками данных ставится перевод строки.
Пример (так работать не будет):
$ echo 'ECT 1' | curl 'http://localhost:8123/?query=SEL' --data-binary @-
Code: 59, e. displayText() = DB::Exception: Syntax error: failed at position 0: SEL
ECT 1
, expected One of: SHOW TABLES, SHOW DATABASES, SELECT, INSERT, CREATE, ATTACH, RENAME, DROP, DETACH, USE, SET, OPTIMIZE., e.what() = DB::Exception
По умолчанию данные возвращаются в формате TabSeparated.
Можно указать любой другой формат с помощью секции FORMAT запроса.
Кроме того, вы можете использовать параметр URL-адреса default_format
или заголовок X-ClickHouse-Format
, чтобы указать формат по умолчанию, отличный от TabSeparated
.
$ echo 'SELECT 1 FORMAT Pretty' | curl 'http://localhost:8123/?' --data-binary @-
┏━━━┓
┃ 1 ┃
┡━━━┩
│ 1 │
└───┘
Возможность передавать данные с помощью POST нужна для запросов INSERT
. В этом случае вы можете написать начало запроса в параметре URL, а вставляемые данные передать POST запросом. Вставляемыми данными может быть, например, tab-separated дамп, полученный из MySQL. Таким образом, запрос INSERT
заменяет LOAD DATA LOCAL INFILE
из MySQL.
Примеры
Создаём таблицу:
$ echo 'CREATE TABLE t (a UInt8) ENGINE = Memory' | curl 'http://localhost:8123/' --data-binary @-
Используем привычный запрос INSERT для вставки данных:
$ echo 'INSERT INTO t VALUES (1),(2),(3)' | curl 'http://localhost:8123/' --data-binary @-
Данные можно отправить отдельно от запроса:
$ echo '(4),(5),(6)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20VALUES' --data-binary @-
Можно указать любой формат для данных. Формат Values — то же, что используется при записи INSERT INTO t VALUES:
$ echo '(7),(8),(9)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20Values' --data-binary @-
Можно вставить данные из tab-separated дампа, указав соответствующий формат:
$ echo -ne '10\n11\n12\n' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20TabSeparated' --data-binary @-
Прочитаем содержимое таблицы. Данные выводятся в произвольном порядке из-за параллельной обработки запроса:
$ curl 'http://localhost:8123/?query=SELECT%20a%20FROM%20t'
7
8
9
10
11
12
1
2
3
4
5
6
Удаляем таблицу.
$ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @-
Для запросов, которые не возвращают таблицу с данными, в случае успеха выдаётся пустое тело ответа.
Сжатие
Сжатие можно использовать для уменьшения трафика по сети при передаче большого количества данных, а также для создания сразу сжатых дампов.
Вы можете использовать внутренний формат сжатия Clickhouse при передаче данных. Формат сжатых данных нестандартный, и вам придётся использовать для работы с ним специальную программу clickhouse-compressor
. Она устанавливается вместе с пакетом clickhouse-client
. Для повышения эффективности вставки данных можно отключить проверку контрольной суммы на стороне сервера с помощью настройки http_native_compression_disable_checksumming_on_decompress.
Если вы указали compress=1
в URL, то сервер сжимает данные, которые он отправляет. Если вы указали decompress=1
в URL, сервер распаковывает те данные, которые вы передаёте методом POST
.
Также можно использовать сжатие HTTP. ClickHouse поддерживает следующие методы сжатия:
gzip
br
deflate
xz
Для отправки сжатого запроса POST
добавьте заголовок Content-Encoding: compression_method
.
Чтобы ClickHouse сжимал ответ, разрешите сжатие настройкой enable_http_compression и добавьте заголовок Accept-Encoding: compression_method
. Уровень сжатия данных для всех методов сжатия можно задать с помощью настройки http_zlib_compression_level.
:::note "Примечание"
Некоторые HTTP-клиенты могут по умолчанию распаковывать данные (`gzip` и `deflate`) с сервера в фоновом режиме и вы можете получить распакованные данные, даже если правильно используете настройки сжатия.
:::
Примеры
# Отправка сжатых данных на сервер
$ echo "SELECT 1" | gzip -c | \
curl -sS --data-binary @- -H 'Content-Encoding: gzip' 'http://localhost:8123/'
# Получение сжатых данных с сервера
$ curl -vsS "http://localhost:8123/?enable_http_compression=1" \
-H 'Accept-Encoding: gzip' --output result.gz -d 'SELECT number FROM system.numbers LIMIT 3'
$ zcat result.gz
0
1
2
База данных по умолчанию
Вы можете использовать параметр URL database
или заголовок X-ClickHouse-Database
, чтобы указать БД по умолчанию.
$ echo 'SELECT number FROM numbers LIMIT 10' | curl 'http://localhost:8123/?database=system' --data-binary @-
0
1
2
3
4
5
6
7
8
9
По умолчанию используется БД, которая прописана в настройках сервера, как БД по умолчанию. По умолчанию, это — БД default. Также вы всегда можете указать БД через точку перед именем таблицы.
Имя пользователя и пароль могут быть указаны в одном из трёх вариантов:
- С использованием HTTP Basic Authentication. Пример:
$ echo 'SELECT 1' | curl 'http://user:[email protected]:8123/' -d @-
- В параметрах URL user и password. Пример:
$ echo 'SELECT 1' | curl 'http://localhost:8123/?user=user&password=password' -d @-
- С использованием заголовков ‘X-ClickHouse-User’ и ‘X-ClickHouse-Key’. Пример:
$ echo 'SELECT 1' | curl -H 'X-ClickHouse-User: user' -H 'X-ClickHouse-Key: password' 'http://localhost:8123/' -d @-
Если пользователь не задан,то используется default
. Если пароль не задан, то используется пустой пароль.
Также в параметрах URL вы можете указать любые настройки, которые будут использованы для обработки одного запроса, или целые профили настроек. Пример:http://localhost:8123/?profile=web&max_rows_to_read=1000000000&query=SELECT+1
Подробнее смотрите в разделе Настройки.
$ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:8123/?' --data-binary @-
0
1
2
3
4
5
6
7
8
9
Об остальных параметрах смотри раздел «SET».
Аналогично можно использовать ClickHouse-сессии в HTTP-протоколе. Для этого необходимо добавить к запросу GET параметр session_id
. В качестве идентификатора сессии можно использовать произвольную строку. По умолчанию через 60 секунд бездействия сессия будет прервана. Можно изменить этот таймаут, изменяя настройку default_session_timeout
в конфигурации сервера, или добавив к запросу GET параметр session_timeout
. Статус сессии можно проверить с помощью параметра session_check=1
. В рамках одной сессии одновременно может исполняться только один запрос.
Прогресс выполнения запроса можно отслеживать с помощью заголовков ответа X-ClickHouse-Progress
. Для этого включите send_progress_in_http_headers. Пример последовательности заголовков:
X-ClickHouse-Progress: {"read_rows":"2752512","read_bytes":"240570816","total_rows_to_read":"8880128"}
X-ClickHouse-Progress: {"read_rows":"5439488","read_bytes":"482285394","total_rows_to_read":"8880128"}
X-ClickHouse-Progress: {"read_rows":"8783786","read_bytes":"819092887","total_rows_to_read":"8880128"}
Возможные поля заголовка:
read_rows
— количество прочитанных строк.read_bytes
— объём прочитанных данных в байтах.total_rows_to_read
— общее количество строк для чтения.written_rows
— количество записанных строк.written_bytes
— объём записанных данных в байтах.
Запущенные запросы не останавливаются автоматически при разрыве HTTP соединения. Парсинг и форматирование данных производится на стороне сервера и использование сети может быть неэффективным.
Может быть передан необязательный параметр query_id — идентификатор запроса, произвольная строка. Подробнее смотрите раздел «Настройки, replace_running_query».
Может быть передан необязательный параметр quota_key — ключ квоты, произвольная строка. Подробнее смотрите раздел «Квоты».
HTTP интерфейс позволяет передать внешние данные (внешние временные таблицы) для использования запроса. Подробнее смотрите раздел «Внешние данные для обработки запроса»
Буферизация ответа
Существует возможность включить буферизацию ответа на стороне сервера. Для этого предусмотрены параметры URL buffer_size
и wait_end_of_query
.
buffer_size
определяет количество байт результата которые будут буферизованы в памяти сервера. Если тело результата больше этого порога, то буфер будет переписан в HTTP канал, а оставшиеся данные будут отправляться в HTTP-канал напрямую.
Чтобы гарантировать буферизацию всего ответа, необходимо выставить wait_end_of_query=1
. В этом случае данные, не поместившиеся в памяти, будут буферизованы во временном файле сервера.
Пример:
$ curl -sS 'http://localhost:8123/?max_result_bytes=4000000&buffer_size=3000000&wait_end_of_query=1' -d 'SELECT toUInt8(number) FROM system.numbers LIMIT 9000000 FORMAT RowBinary'
Буферизация позволяет избежать ситуации, когда код ответа и HTTP-заголовки были отправлены клиенту, после чего возникла ошибка выполнения запроса. В такой ситуации сообщение об ошибке записывается в конце тела ответа, и на стороне клиента ошибка может быть обнаружена только на этапе парсинга.
Запросы с параметрами
Можно создать запрос с параметрами и передать для них значения из соответствующих параметров HTTP-запроса. Дополнительную информацию смотрите в Запросы с параметрами для консольного клиента.
Пример
$ curl -sS "http://localhost:8123/?param_id=2¶m_phrase=test" -d "SELECT * FROM table WHERE int_column = {id:UInt8} and string_column = {phrase:String}"
Предопределенный HTTP интерфейс
ClickHouse поддерживает определенные запросы через HTTP-интерфейс. Например, вы можете записать данные в таблицу следующим образом:
$ echo '(4),(5),(6)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20VALUES' --data-binary @-
ClickHouse также поддерживает предопределенный HTTP-интерфейс, который может помочь вам легче интегрироваться со сторонними инструментами, такими как Prometheus exporter.
Пример:
- Прежде всего, добавьте раздел в конфигурационный файл сервера:
<http_handlers>
<rule>
<url>/predefined_query</url>
<methods>POST,GET</methods>
<handler>
<type>predefined_query_handler</type>
<query>SELECT * FROM system.metrics LIMIT 5 FORMAT Template SETTINGS format_template_resultset = 'prometheus_template_output_format_resultset', format_template_row = 'prometheus_template_output_format_row', format_template_rows_between_delimiter = '\n'</query>
</handler>
</rule>
<rule>...</rule>
<rule>. ..</rule>
</http_handlers>
- Теперь вы можете напрямую запросить URL-адрес для получения данных в формате Prometheus:
$ curl -v 'http://localhost:8123/predefined_query'
* Trying ::1...
* Connected to localhost (::1) port 8123 (#0)
> GET /predefined_query HTTP/1.1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 28 Apr 2020 08:52:56 GMT
< Connection: Keep-Alive
< Content-Type: text/plain; charset=UTF-8
< X-ClickHouse-Server-Display-Name: i-mloy5trc
< Transfer-Encoding: chunked
< X-ClickHouse-Query-Id: 96fe0052-01e6-43ce-b12a-6b7370de6e8a
< X-ClickHouse-Format: Template
< X-ClickHouse-Timezone: Asia/Shanghai
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
# HELP "Query" "Number of executing queries"
# TYPE "Query" counter
"Query" 1# HELP "Merge" "Number of executing background merges"
# TYPE "Merge" counter
"Merge" 0# HELP "PartMutation" "Number of mutations (ALTER DELETE/UPDATE)"
# TYPE "PartMutation" counter
"PartMutation" 0# HELP "ReplicatedFetch" "Number of data parts being fetched from replica"
# TYPE "ReplicatedFetch" counter
"ReplicatedFetch" 0# HELP "ReplicatedSend" "Number of data parts being sent to replicas"
# TYPE "ReplicatedSend" counter
"ReplicatedSend" 0* Connection #0 to host localhost left intact
* Connection #0 to host localhost left intact
Как вы можете видеть из примера, http_handlers
настраивается в файле config. xml и может содержать несколько правил. ClickHouse будет сопоставлять полученные HTTP-запросы с предопределенным типом в правиле, и первое совпадение запустит обработчик. Затем ClickHouse выполнит соответствующий предопределенный запрос.
В настоящий момент с помощью rule
можно настроить method
, headers
, url
, handler
:
method
отвечает за соответствие метода HTTP-запроса.method
соответствует методу method протокола HTTP. Это необязательная настройка. Если она не определена в файле конфигурации, она не соответствует методу HTTP-запроса.url
отвечает за соответствие URL HTTP-запроса. Она совместима с регулярными выражениями RE2. Это необязательная настройка. Если она не определена в файле конфигурации, она не соответствует URL-адресу HTTP-запроса.headers
отвечают за соответствие заголовка HTTP-запроса. Она совместим с регулярными выражениями RE2. Это необязательная настройка. Если она не определен в файле конфигурации, она не соответствует заголовку HTTP-запроса.handler
содержит основную часть обработчика. Сейчасhandler
может настраиватьtype
,status
,content_type
,response_content
,query
,query_param_name
.
type
на данный момент поддерживает три типа: predefined_query_handler, dynamic_query_handler, static.query
— используется с типомpredefined_query_handler
, выполняет запрос при вызове обработчика.query_param_name
— используется с типомdynamic_query_handler
, извлекает и выполняет значение, соответствующее значениюquery_param_name
в параметрах HTTP-запроса.status
— используется с типомstatic
, возвращает код состояния ответа.content_type
— используется со всеми типами, возвращает content-type.response_content
— используется с типомstatic
, содержимое ответа, отправленное клиенту, при использовании префикса ‘file://’ or ‘config://’, находит содержимое из файла или конфигурации, отправленного клиенту.
Далее приведены методы настройки для различных типов.
predefined_query_handler
predefined_query_handler
поддерживает настройки Settings
и query_params
значений. Вы можете настроить запрос в типе predefined_query_handler
.
Значение query
— это предопределенный запрос predefined_query_handler
, который выполняется ClickHouse при совпадении HTTP-запроса и возврате результата запроса. Это обязательная настройка.
В следующем примере определяются настройки max_threads и max_final_threads
, а затем запрашивается системная таблица, чтобы проверить, были ли эти параметры успешно установлены.
:::note "Предупреждение"
Чтобы сохранить стандартные `handlers` такие как `query`, `play`, `ping`, используйте правило `<defaults/>`. /]+))?]]></PARAMS_XXX>
</headers>
<handler>
<type>predefined_query_handler</type>
<query>SELECT value FROM system.settings WHERE name = {name_1:String}</query>
<query>SELECT name, value FROM system.settings WHERE name = {name_2:String}</query>
</handler>
</rule>
<defaults/>
</http_handlers>
$ curl -H 'XXX:TEST_HEADER_VALUE' -H 'PARAMS_XXX:max_threads' 'http://localhost:8123/query_param_with_url/1/max_threads/max_final_threads?max_threads=1&max_final_threads=2'
1
max_final_threads 2
:::note "Предупреждение"
В одном `predefined_query_handler` поддерживается только один запрос типа `INSERT`.
:::
dynamic_query_handler
В dynamic_query_handler
, запрос пишется в виде параметров HTTP-запроса. Разница в том, что в predefined_query_handler
, запрос записывается в конфигурационный файл. Вы можете настроить query_param_name
в dynamic_query_handler
.
ClickHouse извлекает и выполняет значение, соответствующее значению query_param_name
URL-адресе HTTP-запроса. Значение по умолчанию query_param_name
— это /query
. Это необязательная настройка. Если в файле конфигурации нет определения, параметр не передается.
Чтобы поэкспериментировать с этой функциональностью, в примере определяются значения max_threads и max_final_threads
и запрашивается, успешно ли были установлены настройки.
Пример:
<http_handlers>
<rule>
<headers>
<XXX>TEST_HEADER_VALUE_DYNAMIC</XXX> </headers>
<handler>
<type>dynamic_query_handler</type>
<query_param_name>query_param</query_param_name>
</handler>
</rule>
<defaults/>
</http_handlers>
$ curl -H 'XXX:TEST_HEADER_VALUE_DYNAMIC' 'http://localhost:8123/own?max_threads=1&max_final_threads=2¶m_name_1=max_threads¶m_name_2=max_final_threads&query_param=SELECT%20name,value%20FROM%20system. settings%20where%20name%20=%20%7Bname_1:String%7D%20OR%20name%20=%20%7Bname_2:String%7D'
max_threads 1
max_final_threads 2
static
static
может возвращать content_type, status и response_content
. response_content
может возвращать конкретное содержимое.
Пример:
Возвращает сообщение.
<http_handlers>
<rule>
<methods>GET</methods>
<headers><XXX>xxx</XXX></headers>
<url>/hi</url>
<handler>
<type>static</type>
<status>402</status>
<content_type>text/html; charset=UTF-8</content_type>
<response_content>Say Hi!</response_content>
</handler>
</rule>
<defaults/>
</http_handlers>
$ curl -vv -H 'XXX:xxx' 'http://localhost:8123/hi'
* Trying ::1...
* Connected to localhost (::1) port 8123 (#0)
> GET /hi HTTP/1. 1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
> XXX:xxx
>
< HTTP/1.1 402 Payment Required
< Date: Wed, 29 Apr 2020 03:51:26 GMT
< Connection: Keep-Alive
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
* Connection #0 to host localhost left intact
Say Hi!%
Находит содержимое настроек отправленных клиенту.
<get_config_static_handler><![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view=""></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]></get_config_static_handler><http_handlers>
<rule>
<methods>GET</methods>
<headers><XXX>xxx</XXX></headers>
<url>/get_config_static_handler</url>
<handler>
<type>static</type>
<response_content>config://get_config_static_handler</response_content>
</handler>
</rule>
</http_handlers>
$ curl -v -H 'XXX:xxx' 'http://localhost:8123/get_config_static_handler'
* Trying ::1. ..
* Connected to localhost (::1) port 8123 (#0)
> GET /get_config_static_handler HTTP/1.1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
> XXX:xxx
>
< HTTP/1.1 200 OK
< Date: Wed, 29 Apr 2020 04:01:24 GMT
< Connection: Keep-Alive
< Content-Type: text/plain; charset=UTF-8
< Transfer-Encoding: chunked
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
* Connection #0 to host localhost left intact
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view=""></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
Находит содержимое файла, отправленного клиенту.
<http_handlers>
<rule>
<methods>GET</methods>
<headers><XXX>xxx</XXX></headers>
<url>/get_absolute_path_static_handler</url>
<handler>
<type>static</type>
<content_type>text/html; charset=UTF-8</content_type>
<response_content>file:///absolute_path_file. html</response_content>
</handler>
</rule>
<rule>
<methods>GET</methods>
<headers><XXX>xxx</XXX></headers>
<url>/get_relative_path_static_handler</url>
<handler>
<type>static</type>
<content_type>text/html; charset=UTF-8</content_type>
<response_content>file://./relative_path_file.html</response_content>
</handler>
</rule>
</http_handlers>
$ user_files_path='/var/lib/clickhouse/user_files'
$ sudo echo "<html><body>Relative Path File</body></html>" > $user_files_path/relative_path_file.html
$ sudo echo "<html><body>Absolute Path File</body></html>" > $user_files_path/absolute_path_file.html
$ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_absolute_path_static_handler'
* Trying ::1...
* Connected to localhost (::1) port 8123 (#0)
> GET /get_absolute_path_static_handler HTTP/1. 1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
> XXX:xxx
>
< HTTP/1.1 200 OK
< Date: Wed, 29 Apr 2020 04:18:16 GMT
< Connection: Keep-Alive
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
<html><body>Absolute Path File</body></html>
* Connection #0 to host localhost left intact
$ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_relative_path_static_handler'
* Trying ::1...
* Connected to localhost (::1) port 8123 (#0)
> GET /get_relative_path_static_handler HTTP/1.1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
> XXX:xxx
>
< HTTP/1.1 200 OK
< Date: Wed, 29 Apr 2020 04:18:31 GMT
< Connection: Keep-Alive
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
<html><body>Relative Path File</body></html>
* Connection #0 to host localhost left intact
Аутентификация — Все curl
Каждый HTTP-запрос может быть аутентифицирован. Если сервер или прокси-сервер хотят, чтобы пользователь предоставил подтверждение того, что у них есть правильные учетные данные для доступа к URL-адресу или выполнения действия, он может отправить код ответа HTTP, который информирует клиента о том, что ему необходимо предоставить правильный заголовок аутентификации HTTP в просьба разрешить.
Сервер, требующий аутентификации, отправляет обратно код ответа 401 и связанный с ним WWW-Authenticate: 9Заголовок 0006, в котором перечислены все методы аутентификации, поддерживаемые сервером.
Прокси-сервер HTTP, требующий проверки подлинности, возвращает код ответа 407 и соответствующий заголовок Proxy-Authenticate:
, в котором перечислены все методы проверки подлинности, поддерживаемые прокси-сервером.
Возможно, стоит отметить, что большинство современных веб-сайтов не требуют HTTP-аутентификации для входа в систему и т. д., но вместо этого они запрашивают у пользователей вход на веб-страницы, а затем браузер выдает запрос POST с пользователем и паролем и т. д., а затем впоследствии сохранить файлы cookie для сеанса.
Чтобы указать curl выполнить HTTP-запрос с проверкой подлинности, вы используете опцию -u, --user
, чтобы указать имя пользователя и пароль (разделенные двоеточием). Вот так:
curl --user daniel:secret http://example.com/
Это заставит curl использовать «Базовый» метод аутентификации HTTP по умолчанию. Да, он на самом деле называется Basic и он действительно базовый. Чтобы явно запросить базовый метод, используйте --basic
.
Обычный метод проверки подлинности отправляет имя пользователя и пароль в виде открытого текста по сети (в кодировке base64), и его следует избегать для транспорта HTTP.
При запросе на выполнение HTTP-передачи с использованием одного (указанного или подразумеваемого) метода аутентификации curl вставит заголовок аутентификации уже в первый запрос в сети.
Если вы предпочитаете использовать curl first test , если аутентификация действительно требуется, вы можете попросить curl выяснить это, а затем автоматически использовать самый безопасный метод, о котором он знает, с помощью --anyauth
. Это заставляет curl попробовать выполнить запрос без аутентификации, а затем при необходимости переключиться на аутентификацию:
curl --anyauth --user daniel:secret http://example. com/
и та же концепция работает для операций HTTP, которые могут потребовать аутентификации:
curl --proxy-anyauth --proxy-user daniel: secret http://example.com/ \
--proxy http://proxy.example.com:80/
curl обычно (немного в зависимости от того, как он был построен) также говорит о нескольких других методах аутентификации, включая Дайджест, переговоры и NTLM. Вы можете запросить эти методы слишком конкретно:
curl --digest --user daniel:secret http://example.com/
curl --negotiate --user daniel:secret http://example.com/
curl --ntlm --user daniel :secret http://example.com/
Обычная аутентификация | REST API для Joomla
Обзор
REST API cAPI защищен теми же ограничениями, что и стандартный веб-интерфейс Joomla. Это означает, что если вы не войдете в систему, вы получите анонимный доступ к cAPI. Кроме того, если вы вошли в систему и не имеете разрешения на доступ к чему-либо в Joomla, вы также не сможете получить к этому доступ с помощью REST API cAPI.
Базовая аутентификация будет доступна в версии cAPI v1.3.4
В большинстве случаев первым шагом в использовании REST API cAPI является аутентификация учетной записи пользователя на вашем сайте Joomla. Любая аутентификация, которая работает с Joomla, будет работать и с REST API. На этой странице мы покажем вам простой пример базовой аутентификации.
Простой пример
Большинство клиентских программ предоставляют простой механизм ввода имени пользователя и пароля и автоматически создают необходимые заголовки аутентификации. Например, вы можете указать аргумент -u с помощью curl следующим образом:
curl -D- -u Bob:Loblaw -X GET -H "Content-Type: application/json" https://yoursite.com/api/v1/user
Предоставление заголовков Basic Auth
Если вы вам нужно самостоятельно создавать и отправлять базовые заголовки аутентификации. Для этого вам необходимо выполнить следующие шаги:
- Построить строку вида имя пользователя:пароль
- Base64 кодирует строку
- Предоставьте заголовок «Авторизация» с содержимым «Basic», за которым следует закодированная строка. Например, строка "bob:loblaw" кодируется как "Ym9iOmxvYmxhdw==" в base64, поэтому вы должны сделать запрос следующим образом.
curl -D- -X GET -H "Авторизация: Basic Ym9iOmxvYmxhdw==" -H "Тип контента: application/json" "https://yoursite.com/api/v1/user"
Принудительный запрос базовой HTTP-аутентификации
Конечный пользователь может активировать окно запроса базовой аутентификации, добавив следующий параметр URL к любому запросу метода REST:
basic_auth=true
в веб-браузере) с запросом авторизованного имени пользователя и пароля. После отправки учетные данные будут сохранены на время сеанса.
Примечание. Всегда используйте зашифрованные соединения HTTPS при подключении к REST API.
Устранение неполадок
PHP не видит заголовок авторизации
(оригинальный источник)
При реализации конечной точки маркера вы можете заметить, что не можете получить доступ к значению HTTP-заголовка авторизации — $_SERVER не включил его.