Содержание

10 команд curl, которые вам следует знать — Разработка на vc.ru

Команда Mail.ru Cloud Solutions перевела статью, автор которой составил краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS. Это не замена официального руководства по cURL, скорее, краткий конспект.

157 788 просмотров

cURL (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.

curl — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.

Команда curl запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.

Варианты применения:

  • доступ без браузера;
  • внутри shell-скриптов;
  • для тестирования API.

В основном я использовал curl для тестирования API, иногда просто вставляя команды, которые нашел в интернете. Но я хочу разобраться в curl и лучше понять его особенности. Так что поделюсь некоторыми командами, с которыми столкнулся во время работы.

Запрос страницы

Если никакие аргументы не указаны, то команда curl выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.

curl www.google.com

Скачивание файла

Есть два варианта этой команды.

  • Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).

curl -O https://testdomain.com/testfile.tar.gz

  • Скачать файл и сохранить под другим именем.

curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz

Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.

curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz

Получение заголовков HTTP

Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.

curl -I https://www.google.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.» Date: Thu, 04 Jun 2020 15:07:42 GMT Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Expires: Thu, 04 Jun 2020 15:07:42 GMT Cache-Control: private Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure Set-Cookie: <cookie_info>

Игнорирование ошибки неправильных или самоподписанных сертификатов

Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию curl верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.

curl -k https://localhost/my_test_endpoint

Отправка POST-запроса

Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.

  • Запрос в виде списка имя=значение.

curl —data «param1=test1&param2=test2» http://test.com

  • Запрос в виде JSON.

curl -H ‘Content-Type: application/json’ —data ‘{«param1″:»test1″,»param2″:»test2»}’ http://www.test.com

Параметр —data эквивалентен -d, оба указывают curl выполнить HTTP POST-запрос.

Указание типа запроса

Если curl не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то curl поддерживает опции, указывающие тип запроса. Параметры -x или —request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.

# updating the value of param2 to be test 3 on the record id curl -X ‘PUT’ -d ‘{«param1″:»test1″,»param2″:»test3»}’ \http://test.com/1

Использование авторизации

API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или —user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.

curl -u <user:password> https://my-test-api.com/endpoint1

Управление резольвом имен

Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный резольв имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.

curl —resolve www.test.com:80:localhost http://www.test.com/

Загрузка файла

О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией -F эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает curl передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.

curl -F @[email protected]/to/local_file

Вы можете загрузить несколько файлов, повторяя параметр -F.

curl -F @[email protected]/to/local_file @[email protected]/to/local_file_2

Измерение продолжительности соединения

Вы можете использовать опцию -w для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.

curl -w «%{time_total}\n» -o /dev/null -s www.test.com

Это некоторые из опций, которые можно использовать с curl. Надеюсь, информация была вам полезна и статья понравилась.

Удачи!

Что еще почитать:

  • Иллюстрированное руководство по полезным инструментам командной строки.
  • Что происходит, когда вы обновляете свой DNS.
  • Наш Телеграм-канал о цифровой трансформации.

Написание HTTP-запросов с помощью Curl

Эта статья предполагает, что вам известны основы построения сетей и язык HTML.

Возможность написания скриптов является существенной при построении хорошей компьютерной системы. Расширяемость возможностей Unix-систем при помощи shell-скриптов и различных программ, выполняющих автоматизированные команды — вот одна из причин того, почему они имеют такой успех.

Увеличивающееся число приложений, которые переходят на веб, привело к тому, что тема HTTP-скриптов становится все более востребованной. Важными задачами в этой области являются автоматическое извлечение информации из интернета, отсылание или загрузка данных на web-сервера и т.п.

Curl — инструмент командной строки, который позволяет проделывать URL-манипуляции и передачи различного рода. Эта статья сфокусирована на создании простых HTTP-запросов. Предполагается, что вы уже знаете где набирать

# curl —help

или

# curl —manual

для получения информации о curl.

Curl не является инструментом, который будет делать все за вас. Он создает запросы, принимает данные и отсылает данные. Возможно, вам потребуется какой-то «клей» для объединения всего, возможно какой-то скриптовый язык (например bash) или несколько ручных вызовов.

1. Протокол HTTP

HTTP — это протокол, используемый при приеме данных от web-серверов. Это очень простой протокол, который построен на TCP/IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько методов, как будет показано далее.

HTTP — это строки ASCII-текста, отсылаемые от клиента к серверу для запроса какого-либо действия. При получении запроса сервер отвечает клиенту несколькими служебными текстовыми строками, а затем и собственно контентом.

Используя ключ curl -v, вы можете увидеть, какие команды curl отсылает серверу, а также другой информационный текст. Ключ -v — пожалуй, единственная возможность отладить или даже понять особенности взаимодействия curl и веб-сервера.

2. URL

Формат URL (Uniform Resource Locator — универсальный адрес ресурса) задает адрес определенного ресурса в Интернете. Вам это наверняка известно, примеры URL: http://curl.haxx.se или https://yourbank.com.

3. Получить (GET) страницу

Простейший и самый обычный HTTP-запрос — получить содержимое URL. URL может ссылаться на web-страницу, картинку или файл. Клиент отсылает GET-запрос на сервер и получает запрашиваемый документ. Если выполнить команду

# curl http://curl.haxx.se

вы получите web-страницу, выведенную в ваше терминальное окно. Полный HTML-документ, который содержится по этому адресу URL.

Все HTTP-ответы содержат набор заголовков, которые обычно скрыты. Чтобы их увидеть вместе с самим документом, используйте ключ curl -i. Вы можете также запросить только заголовки при помощи ключа -I (который заставит curl сделать HEAD-запрос).

4. Формы

Формы — основной способ представления web-сайта как HTML-страницы с полями, в которые пользователь вводит данные, и затем нажимает на кнопку ‘OK’ или ‘Отправить’, после чего данные отсылаются на сервер. Затем сервер использует принятые данные и решает, как действовать дальше: искать информацию в базе данных, показать введенный адрес на карте, добавить сообщение об ошибке или использовать информацию для аутентификации пользователя. Разумеется, на стороне сервера имеется какая-то программа, которая принимает ваши данные.

4.1 GET

GET-форма использует метод GET, например следующим образом:

<form method=»GET» action=»junk.cgi»>

<input type=text name=»birthyear»>

<input type=submit name=press value=»OK»>

</form>

Если вы откроете этот код в вашем браузере, вы увидите форму с текстовым полем и кнопку с надписью «OK». Если вы введете ‘1905’ и нажмете OK, браузер создаст новый URL, по которому и проследует. URL будет представляться строкой, состоящей из пути предыдущего URL и строки, подобной «junk.cgi?birthyear=1905&press=OK».

Например, если форма располагалась по адресу «www.hotmail.com/when/birth.html», то при нажатии на кнопку OK вы попадете на URL «www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK».

Большинство поисковых систем работают таким образом.

Чтобы curl сформировал GET-запрос, просто введите то, что ожидалось от формы:

# curl «www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK»

4.2 POST

Метод GET приводит к тому, что вся введенная информация отображается в адресной строке вашего браузера. Может быть это хорошо, когда вам нужно добавить страницу в закладки, но это очевидный недостаток, когда вы вводите в поля формы секретную информацию, либо когда объем информации, вводимый в поля, слишком велик (что приводит к нечитаемому URL).

Протокол HTTP предоставляет метод POST. С помощью него клиент отправляет данные отдельно от URL и поэтому вы не увидете их в адресной строке.

Форма, генерирующая POST-запрос, похожа на предыдущую:

<form method=»POST» action=»junk.cgi»>

<input type=text name=»birthyear»>

<input type=submit name=press value=» OK «>

</form>

Curl может сформировать POST-запрос с теми же данными следующим образом:

# curl -d «birthyear=1905&press=%20OK%20» www.hotmail.com/when/junk.cgi

Этот POST-запрос использует ‘Content-Type application/x-www-form-urlencoded’, это самый широко используемый способ.

Данные, которые вы отправляете к серверу, должны быть правильно закодированы, curl не будет делать это за вас. К примеру, если вы хотите, чтобы данные содержали пробел, вам нужно заменить этот пробел на %20 и т.п. Недостаток внимания к этому вопросу — частая ошибка, из-за чего данные передаются не так, как надо.

4.3 Загрузка файлов с помощью POST (File Upload POST)

В далеком 1995 был определен дополнительный способ передавать данные по HTTP. Он задокументирован в RFC 1867, поэтому этот способ иногда называют RFC1867-posting.

Этот метод в основном разработан для лучшей поддержки загрузки файлов. Форма, которая позволяет пользователю загрузить файл, выглядит на HTML примерно следующим образом:

<form method=»POST» enctype=’multipart/form-data’ action=»upload.cgi»>

<input type=file name=upload>

<input type=submit name=press value=»OK»>

</form>

Заметьте, что тип содержимого Content-Type установлен в multipart/form-data.

Чтобы отослать данные в такую форму с помощью curl, введите команду:

# curl -F upload=@localfilename -F press=OK [URL]

4.4 Скрытые поля

Обычный способ для передачи информации о состоянии в HTML-приложениях — использование скрытых полей в формах. Скрытые поля не заполняются, они невидимы для пользователя и передаются так же, как и обычные поля.

Простой пример формы с одним видимым полем, одним скрытым и кнопкой ОК:

<form method=»POST» action=»foobar. cgi»>

<input type=text name=»birthyear»>

<input type=hidden name=»person» value=»daniel»>

<input type=submit name=»press» value=»OK»>

</form>

Чтобы отправить POST-запрос с помощью curl, вам не нужно думать о том, скрытое поле или нет. Для curl они все одинаковы:

# curl -d «birthyear=1905&press=OK&person=daniel» [URL]

4.5 Узнать, как выглядит POST-запрос

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

Простой способ увидеть свой POST-запрос, это сохранить HTML-страницу с формой на диск, изменить метод на GET, и нажать кнопку ‘Отправить’ (вы можете также изменить URL, которому будет передаваться данные).

Вы увидите, что данные присоединились к URL, отделенные символами ‘?’, как и предполагается при использовании GET-форм.

5. PUT

Пожалуй, лучший способ загружать данные на HTTP-сервер, это использовать PUT. Опять же, это требует программы (скрипта) на серверной части, которая знает, что делать и как принимать поток HTTP PUT.

Отослать файл на сервер при помощи curl:

# curl -T uploadfile www.uploadhttp.com/receive.cgi

6. Аутентификация

Аутентификация — передача серверу имени пользователя и пароля, после этого он проверяет, имеете ли вы право выполнить требуемый запрос. Аутентификация по методу Basic (которым curl пользуется по умолчанию) основана на открытом тексте, что означает, что имя пользователя и пароль не будут зашифрованы, а лишь слегка «затуманены» по алгоритму Base64, что оставляет возможность узнать эту информацию злоумышленникам на пути между вами и HTTP-сервером.

Указание curl использовать имя пользователя и пароль:

# curl -u name:password www.secrets.com

Сайт может требовать использования другого метода аутентификации (посмотрите, что пишет сервер в заголовках), в этих случаях можно использовать ключи —ntlm, —digest, —negotiate или даже —anyauth. Иногда доступ к внешним HTTP-серверам происходит через прокси, так часто делают в компаниях и фирмах. HTTP-прокси может требовать свои логин и пароль для доступа к Интернету. Соответствующий ключ curl:

# curl -U proxyuser:proxypassword curl.haxx.se

Если прокси требует аутентификации по методу NTLM, укажите —proxy-ntlm, если метод Digest, то —proxy-digest.

Если вы не укажете пароль в ключах -u и -U, то curl спросит его у вас в интерактивном режиме.

Заметьте, что когда curl работает, строка запуска (а вместе с этим и ключи, и пароли) могут быть видны другим пользователям вашей системы в списке задач. Есть способы предотвратить это. Об этом ниже.

7. Referer

HTTP-запрос может включать поле ‘referer’, которое указывает, с какого URL пользователь пришел на данный ресурс. Некоторые программы/скрипты проверяют поле ‘referer’ и не выполняют запрос, если пользователь пришел с неизвестной страницы. Хотя это и глупый способ проверки, тем не менее многие скрипты используют его. С помощью curl вы можете вписать что угодно в поле ‘referer’ и таким образом заставлять выполнять то, что вам нужно.

Это делается следующим образом:

# curl -e http://curl.haxx.se daniel.haxx.se

8. User Agent

Все HTTP-запросы поддерживают поле ‘User-Agent’, в котором указывается клиентское приложение пользователя. Многие web-приложения используют эту информацию, чтобы тем или иным способом отобразить страницу. Web-программисты создают несколько версий страницы для пользователей разных браузеров в целях улучшения внешнего вида, использования различных скриптов javascript, vbscript и т.д.

Иногда вы можете обнаружить, что curl возвращает страницу не такой, какой вы ее видели в своем браузере. В этом случае как раз уместно использовать поле ‘User Agent’, чтобы в очередной раз обмануть сервер.

Замаскировать curl под Internet Explorer на машине с Windows 2000:

# curl -A «Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)» [URL]

Почему бы не стать Netscape 4. 73 на Linux-машине (PIII):

# curl -A «Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)» [URL]

9. Перенаправления (redirects)

Отвечая на ваш запрос, сервер вместо самой страницы может вернуть указание, куда браузер должен пойти дальше, чтобы попасть на нужную страницу. Заголовок, который указывает браузеру такое перенаправление — это ‘Location:’.

По умолчанию curl не идет по адресу, указанному в ‘Location:’, а просто показывает страницу как обычно. Но можно его направить следующим образом:

# curl -L www.sitethatredirects.com

Если вы используете curl для POST-запросов на сайт, который сразу же перенаправляет на другую страницу, вы можете смело использовать связку -L и -d/-F. Curl сформирует POST-запрос для первой страницы, а затем GET-запрос для последующей.

10. Cookies

С помощью cookies веб-браузеры контролируют состояние на стороне клиента. Cookie — это имя с присоединенным содержимым. Сервер при помощи отправки cookies сообщает клиенту путь и имя хоста, по которому в следующий раз должны быть отправлены cookies, сообщает время жизни cookies и некоторые другие параметры.

Когда клиент соединяется с сервером по адресу, указанному в принятом cookie, клиент посылает этот cookie к серверу (если время жизни не истекло).

Многие приложения и сервера используют этот метод, чтобы объединить нескольких запросов в одну логическую сессию. Чтобы curl также мог выполнять такую функцию, мы должны уметь сохранять и отправлять cookies, как и делают браузеры.

Простейший способ отправить cookie к серверу при получении страницы с помощью curl, это добавить соответствующий ключ в командной строке:

# curl -b «name=Daniel» www.cookiesite.com

Cookies отправляются как обычные HTTP-заголовки. Это позволяет curl сохранять cookies, сохраняя заголовки. Сохранение cookies с помощью curl выполняется командой:

# curl -D headers_and_cookies www.cookiesite.com

(кстати, для сохранения cookies лучше использовать ключ -c, об этом ниже).

У curl имеется полнофункциональный обработчик cookies, который полезен, когда вы хотите соединиться в очередной раз к серверу и использовать cookies, сохраненные в прошлый раз (либо подработанные вручную). Для использования cookies, сохраненных в файле, вызовите curl так:

# curl -b stored_cookies_in_file www.cookiesite.com

«Cookie-движок» curl включается, когда вы указываете ключ -b. Если вы хотите, чтобы curl лишь воспринимал cookies, используйте -b с указанием файла, которого не существует. Например, если вы хотите, чтобы curl принял cookies со страницы, а затем пошел по перенаправлению (возможно, отдав принятый только что cookie), то можно вызывать curl так:

# curl -b nada -L www.cookiesite.com

Curl умеет читать и писать cookie-файлы, имеющие формат Netscape и Mozilla. Это удобный способ обмениваться cookies между браузерами и автоматическими скриптами. Ключ -b автоматически определяет, является ли данный файл cookie-файлом указанных браузеров и обрабатывает его соответствующим образом, а используя ключ -c/—cookie-jar, вы можете заставить curl записать новый cookie-файл по завершении операции:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Есть несколько способов обезопасить ваши HTTP-передачи. Наиболее известным протоколом, решающим эту задачу, является HTTPS, или HTTP over SSL. SSL зашифровывает все посылаемые и принимаемые по сети данные, что увеличивает вероятность того, что ваша информация останется в тайне.

Curl поддерживает запросы к HTTPS-серверам благодаря свободно распространяемой библиотеке OpenSSL. Запросы происходят обычным способом:

# curl https://that.secure.server.com

11.1 Сертификаты

В мире HTTPS для аутентификации в дополнение к имени пользовавателя и паролю вы используете сертификаты. Curl поддерживает сертификаты на стороне клиента. Все сертификаты заперты ключевой фразой, которую вам нужно ввести прежде чем curl может начать с ними работу. Ключевая фраза может быть указана либо в командной строке, либо введена в интерактивном режиме. Сертификаты в curl используются следующим образом:

# curl -E mycert.pem https://that.secure.server.com

Curl также проверяет сервер на подлинность, сверяя сертификат сервера с локально хранящимся. Обнаружившееся несоответствие приведет к тому, что curl откажется соединяться. Для игнорирования проверки на подлинность используйте ключ -k.

Более подробная информация о сертификатах может быть найдена на странице http://curl.haxx.se/docs/sslcerts.html.

12. Произвольные заголовки запроса

Возможно, вам понадобится изменять или добавлять элементы отдельных запросов curl.

К примеру, вы можете изменить запрос POST на PROPFIND и отправить данные как «Content-Type: text/xml» (вместо обычного Content-Type):

# curl -d «<xml>» -H «Content-Type: text/xml» -X PROPFIND url.com

Вы можете удалить какой-нибудь заголовок, указав его без содержимого. Например, вы можете удалить заголовок ‘Host:’, тем самым сделав запрос «пустым»:

# curl -H «Host:» http://mysite.com

Также вы можете добавлять заголовки. Возможно, вашему серверу потребуется заголовок ‘Destination:’:

# curl -H «Destination: http://moo.com/nowhere» http://url.com

13. Отладка

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

  • Используйте ключ —trace-ascii для сохранения подробного отчета запросов, чтобы затем подробно изучить их и разобраться в проблеме.
  • Убедитесь, что вы проверяете на cookies и используете их при необходимости (ключ чтения -b и сохранения -c)
  • Укажите в поле ‘user-agent’ один из последних популярных браузеров
  • Заполните поле ‘referer’ как это делает браузер
  • Если вы используете POST-запросы, убедитесь, что все поля передаются в том же порядке, что и браузер (см. выше, пункт 4.5)

Хороший помощник в этом нелегком деле — плагин для Mozilla/Firefox LiveHTTPHeader, который позволяет просматривать все заголовки, которые отправляет и принимает этот браузер (даже при использовании HTTPS).

Более низкоуровневый подход — захват HTTP-траффика в сети с помощью программ, таких как ethereal или tcpdump, с последующим анализом, какие заголовки были получены и отправлены браузером (HTTPS делает этот подход неэффективным).

14. Ссылки

RFC 2616 обязательно для чтения всем, кто хочет понять протокол HTTP.

RFC 2396 объясняет синтаксис URL.

RFC 2109 определяет работу cookies.

RFC 1867 определяет формат File Upload Post.

http://openssl.planetmirror.com — домашняя страница проекта OpenSSL

http://curl.haxx.se — домашняя страница проекта cURL

Команда Linux curl для имитации запроса POST / GET

Команда curl — это инструмент передачи файлов, который использует правила URL для работы в командной строке.

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

Как мощный инструмент curl поддерживает множество протоколов, включая HTTP, HTTPS, FTP и т. Д. Он также поддерживает GET, POST, файлы cookie, аутентификацию, загрузку некоторых файлов с заданного смещения, строку пользовательского агента, ограничение скорости, размер файла, индикатор выполнения и другие функции, он также может выполнять поток обработки веб-страниц и автоматизацию поиска данных.

В процессе разработки и тестирования фоновой веб-программы часто бывает необходимо отправить URL-адреса для тестирования.Использование curl позволяет легко имитировать команды URL, соответствующие требованиям.

Синтаксис curl: curl [параметры …] <url> # curl (параметры) (параметры)

Пример 1: curl -m 30 —retry 3https://proxy.mimvp.com/ip.php // curl сканирует веб-страницу, получает IP-адрес локальной внешней сети

Пример 2: curl -m 30 —retry 3 -x https://120.77.176.179:8888https://proxy.mimvp.com/ip.php // curl сканирует веб-страницу через IP-адрес прокси, чтобы получить IP-адрес локальной внешней сети

Еще примеры:https://proxy.mimvp.com/demo2.php (Shell curl wget)

Используйте curl для отправки запроса GET: curlprotocol://ip:port/url?args

curl https://proxy.mimvp.com/login?user=admin&passwd=12345678

Используйте curl для отправки запроса POST: (рекомендуется)

curl -d «key1=value1&key2=value2&key3=value3» protocol://ip:port/path

Пример 1: curl -d’post_data = i_love_mimvp. com’ https://proxy.mimvp.com/ip.php // Тестируем пост и возвращаем все отправленные данные, например’i_love_mimvp.com’

Пример 2: curl -d «user = admin & passwd = 12345678″https://proxy.mimvp.com/login // Тестовая публикация, имитация отправки логина и пароля

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

curl -H «Content-Type:application/json» -X POST -d ‘json data’ URL

Пример 1: curl -H «Content-Type: application / json» -X POST -d ‘{«post_data»: «i_love_mimvp.com»}’ ‘https://proxy.mimvp.com/ip.php’

Пример 2: curl -H «Content-Type: application / json» -X POST -d ‘{«user»: «admin», «passwd»: «12345678»}’https://proxy.mimvp.com/login

пример приложения curl

1. Загрузка файла

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

Если в системе нет curl, вы можете использовать yum install curl для установки или можете загрузить и установить его.

curl предназначен для вывода загруженного файла на стандартный вывод, а информацию о ходе выполнения — на стандартный вывод. Используйте параметр —silent, чтобы не отображать информацию о ходе выполнения.

curl URL —silent

Эта команда выводит загруженный файл на терминал, а все загруженные данные записываются в стандартный вывод.

Используйте опцию -O для записи загруженных данных в файл, при этом должен использоваться абсолютный адрес файла:

curl http://man.linuxde.net/text.iso —silent -O

Опция -o записывает данные загрузки в файл с указанным именем и использует —progress для отображения индикатора выполнения: (обычно используется)

curl http://man.linuxde.net/test.iso -o filename.iso —progress

######################################### 100.0%

2. Возобновите загрузку.

curl может продолжить загрузку с определенного смещения файла, он может загрузить часть файла, указав дешевую сумму:

curl URL / файл -C смещение
 #Offset - целое число в байтах.  Если вы позволяете curl автоматически определять правильную позицию для возобновления, используйте -C -:
curl -C -URL

3. Справочная страница Curl Set.(Обычно используется)

Справочная страница — это строка, расположенная в заголовке HTTP, чтобы указать, с какой страницы пользователь перешел на текущую страницу.

Если пользователь нажимает ссылку на веб-странице A, пользователь переходит на веб-страницу B, а строка справочной страницы в заголовке веб-страницы B содержит URL-адрес веб-страницы A.

Используйте параметр —referer, чтобы указать строку справочной страницы:

curl --referer http://www.baidu.com https://proxy.mimvp.com

4. curl set cookies(Обычно используется)

Используйте параметр —cookie «COKKIES», чтобы указать файлы cookie. Несколько файлов cookie разделяются точкой с запятой:

curl https://proxy.mimvp.com --cookie "user=root;pass=123456"

Чтобы сохранить cookie в виде файла, используйте параметр —cookie-jar:

curl URL --cookie-jar cookie_file

5. curl установить строку пользовательского агента(Обычно используется)

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

Вы можете использовать curl, чтобы установить пользовательский агент в IE, чтобы вы могли получить к нему доступ.

Используйте параметр —user-agent или -A:

curl URL --user-agent "Mozilla/5.0"
curl URL -A "Mozilla/5.0"

Другая информация заголовка HTTP также может быть отправлена ​​с помощью curl. Используйте -H «информация заголовка» для передачи информации нескольких заголовков, например:

curl -H "Host:proxy.mimvp.com" -H "accept-language:zh-cn" URL

6. Контроль пропускной способности Curl и квота на скачивание.

Используйте —limit-rate, чтобы ограничить скорость загрузки curl:

curl URL —limit-rate 50k

Используйте k (килобайты) и m (мегабайты), чтобы указать ограничение скорости загрузки в команде.

Используйте —max-sizes, чтобы указать максимальный размер файла, который может быть загружен:

curl URL —max-filesize bytes

Если размер файла превышает лимит, команда возвращает ненулевой код выхода, а если команда нормальная, возвращается 0.

7. Curl для аутентификации

Используйте параметр curl -u для завершения аутентификации HTTP или FTP. Вы можете указать пароль или не указывать пароль. Введите пароль в последующих операциях:

curl -u user:pwd http://proxy.mimvp.com
curl -u user http://proxy.mimvp.com

8. curl печатает только информацию заголовка ответа(Обычно используется)

Вы можете распечатать только информацию заголовка HTTP с помощью -I или -head:

yg-mac:~ homer$ curl -I https://proxy.mimvp.com
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 31 May 2018 03:51:08 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=d4kf789gvurb10p7g5pcqd80o6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: proxys-bj

описание параметра curl

-a / - append При загрузке файла добавить к целевому файлу
 -A / - user-agent <string> Установить пользовательский агент для отправки на сервер
 -anyauth может использовать "любой" метод аутентификации
 -b / - cookie <name = string / file> строка cookie или место чтения файла
           --basic Использовать базовую аутентификацию HTTP
 -B / - использовать-ascii использовать ASCII / текстовую передачу
 -c / - cookie-jar <файл> Записать cookie в этот файл после завершения операции
 -C / - continue-at <offset> точка останова для продолжения
 -d / - data <данные> HTTP-метод POST для передачи данных
           --data-ascii <данные> Размещать данные в формате ascii
           --data-binary <данные> отправлять данные в двоичном режиме
           --negotiate использовать HTTP-аутентификацию
           --digest использовать цифровую аутентификацию
           --disable-eprt запретить использование EPRT или LPRT
           --disable-epsv Отключить использование EPSV
 -D / - dump-header <файл> записать информацию заголовка в файл
           --egd-file <файл> Установить путь к сокету EGD для случайных данных (SSL)
           --tcp-nodelay использовать параметр TCP_NODELAY
 -e / - URL-адрес источника реферала
 -E / - cert <cert [: passwd]> Файл сертификата клиента и пароль (SSL)
           --cert-type <type> Тип файла сертификата (DER / PEM / ENG) (SSL)
           --key <ключ> имя файла закрытого ключа (SSL)
           --key-type <type> Тип файла закрытого ключа (DER / PEM / ENG) (SSL)
           --pass <pass> пароль закрытого ключа (SSL)
           --engine <eng> Использование механизма шифрования (SSL).  "--engine list" для списка
           --cacert <файл> Сертификат ЦС (SSL)
           --capath <directory> Каталог CA (созданный с использованием c_rehash) для проверки однорангового узла (SSL)
           --ciphers <список> SSL-шифры
           --compressed требует, чтобы возврат был сжат (с использованием deflate или gzip)
           --connect-timeout <секунды> установить максимальное время запроса
           --create-dirs устанавливает иерархию каталогов локальных каталогов
           --crlf upload - преобразовать LF в CRLF
 -f / - ошибка не отображать ошибку http при сбое подключения
           --ftp-create-dirs Если удаленный каталог не существует, создать удаленный каталог
           --ftp-method [multicwd / nocwd / singlecwd] Управлять использованием CWD
           --ftp-pasv использовать PASV / EPSV вместо порта
           --ftp-skip-pasv-ip При использовании PASV игнорировать IP-адрес
           --ftp-ssl попытаться использовать SSL / TLS для передачи данных ftp
           --ftp-ssl-reqd требует SSL / TLS для передачи данных ftp
 -F / - form <name = content> Имитировать данные отправки http-формы
           --form-string <name = string> Имитировать данные отправки формы http
 -g / - globoff Отключить использование последовательности и диапазона URL {} и []
 -G / - получить Отправить данные способом получения
 -H / - header <line> Передать на сервер информацию о настраиваемом заголовке
           --ignore-content-length Длина игнорируемой информации заголовка HTTP. 
 -i / - включать в вывод информацию заголовка протокола
 -I / - только заголовок отображает информацию заголовка запроса
-j / - junk-session-cookies читать файл и игнорировать сессионные cookie
           --interface <interface> Использовать указанный сетевой интерфейс / адрес
           --krb4 <уровень> Использовать krb4 указанного уровня безопасности
 -k / - insecure разрешает SSL-сайты без использования сертификатов
 -K / - конфигурировать чтение указанного файла конфигурации
 -l / - список только имен файлов в каталоге ftp
           --limit-rate <rate> установить скорость передачи
           --local-port <NUM> Обязательное использование номера локального порта
 -m / - max-time <секунды> установить максимальное время передачи
           --max-redirs <число> установить максимальное количество каталогов для чтения
           --max-sizes <bytes> Установить максимальное общее количество загружаемых файлов.
 -M / - manual показать полное руководство
 -n / - netrc читать имя пользователя и пароль из файла netrc
           --netrc-optional Использовать . netrc или URL для переопределения -n
           --ntlm использовать HTTP NTLM-аутентификацию
 -N / - без буфера отключить буферизованный вывод
 -o / - выводить вывод в этот файл
 -O / - удаленное имя записать вывод в файл, сохранить имя удаленного файла
 -p / - proxytunnel использовать HTTP-прокси
           --proxy-anyauth выбрать любой метод аутентификации прокси
           --proxy-basic использовать базовую аутентификацию на прокси
           --proxy-digest Использовать цифровую аутентификацию на прокси
           --proxy-ntlm использовать аутентификацию ntlm на прокси
 -P / - ftp-port <адрес> Использовать адрес порта вместо PASV
 -q как первый параметр, закрыть .curlrc
 -Q / - quote <cmd> Отправлять команды серверу перед передачей файла
 -r / - range <диапазон> Получить диапазон байтов с HTTP / 1.1 или FTP-сервера
 --range-file Прочитать (SSL) случайный файл
 -R / - удаленное время При создании файлов локально сохранять удаленное время файла
           --retry <num> Когда есть проблема с передачей, количество повторных попыток
           --retry-delay <секунды> При возникновении проблем с передачей установите интервал повтора
           --retry-max-time <секунды> При возникновении проблем с передачей установить максимальное время повтора
 -s / - тихий Тихий режим.  Ничего не выводить
 -S / - показать ошибку показать ошибку
           --socks4 <host [: port]> Использовать socks4 для проксирования данного хоста и порта
           --socks5 <host [: port]> использовать socks5 для проксирования данного хоста и порта
     --stderr <file>     
 -t / - telnet-option <OPT = val> Настройка опции Telnet
           --trace <файл> Отладить указанный файл
           --trace-ascii <файл> Аналогично --trace, но без шестнадцатеричного вывода
           --trace-time Добавить отметку времени при трассировке / подробном выводе
 -T / - upload-file <файл> загрузить файл
     --url <URL>    Spet URL to work with
 -u / - user <user [: password]> Установить пользователя и пароль сервера
 -U / - proxy-user <user [: password]> установить имя пользователя и пароль прокси
 -w / - запись [формат] После чего вывод завершается
 -x / - proxy <host [: port]> Использовать HTTP-прокси на заданном порту
 -X / - запрос <команда> указать какую команду
 -y / - speed-time Время, необходимое для отказа от ограничения скорости, по умолчанию 30. 
 -Y / - ограничение скорости стоп ограничение скорости передачи, скорость время

debug — Как вы отображаете данные POST с помощью cURL?

Спросил

Изменено 1 год, 3 месяца назад

Просмотрено 229k раз

В качестве примера, отправка POST на веб-сервер с аргументом -v:

 curl -v http://testserver.com/post -d "firstname=john&lastname=doe"
 

И вывод

 > POST /post HTTP/1.1
> Пользовательский агент: curl/7.19.7 (универсальный-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
> Хост: testserver.com
> Принять: */*
> Длина контента: 28
> Тип контента: application/x-www-form-urlencoded
>
< HTTP/1.1 200 ОК
(так далее)
 

Там нет упоминания о данных, которые я разместил.

Есть ли в cURL возможность отображать в выводе строку "firstname=john&lastname=doe"?

Примечание. Очевидно, что строка, которую я хочу, находится в команде, которую я выполнил, но есть несколько других параметров публикации, таких как --form и --data-ascii и т. д. Я хотел бы видеть необработанные данные, отправляемые на сервер .

  • завиток
  • отладка

2

Самое близкое, что я получил без использования tcpdump , использует параметр --trace-ascii :

 ~ curl http://w3.org/ -d "hello=there" --trace-ascii /dev/ стандартный вывод
== Информация: о подключении() к порту 80 w3.org (#0)
== Информация: попытка 128.30.52.45... == Информация: подключено
== Информация: подключено к w3.org (128.30.52.45) порт 80 (#0)
=> Отправить заголовок, 210 байт (0xd2)
0000: ПОЧТА/HTTP/1.1
0011: Агент пользователя: curl/7.19.7 (универсальный-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Хост: w3.org
007e: Принять: */*
008b: Длина содержимого: 11
009f: Content-Type: application/x-www-form-urlencoded
00d0:
=> Отправить данные, 11 байт (0xb)
0000: привет=там
 

К сожалению, это не работает, когда вы публикуете multipart/form-data :

 ~ curl http://w3. org/ -F hello=there -F testing=123 --trace-ascii / dev/stdout
== Информация: о подключении() к порту 80 w3.org (#0)
== Информация: попытка 128.30.52.45... == Информация: подключено
== Информация: подключено к w3.org (128.30.52.45) порт 80 (#0)
=> Отправить заголовок, 270 байт (0x10e)
0000: ПОЧТА/HTTP/1.1
0011: Агент пользователя: curl/7.19.7 (универсальный-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Хост: w3.org
007e: Принять: */*
008b: Длина содержимого: 244
00a0: Ожидать: 100-продолжить
00b6: Content-Type: multipart/form-data; граница=--------------------
00f6: --------19319e4d1b79
010с:
<= Заголовок Recv, 32 байта (0x20)
0000: HTTP/1.1 301 перемещен навсегда
 

9

Или вы можете проверить с помощью https://httpbin.org/

 $ curl https://httpbin.org/post -d "firstname=john&lastname=doe"
{
  "аргументы": {},
  "данные": "",
  "файлы": {},
  "форма": {
    "имя": "Джон",
    "фамилия": "лань"
  },
  "заголовки": {
    "Принимать": "*/*",
    "Длина содержания": "27",
    "Content-Type": "application/x-www-form-urlencoded",
    «Хост»: «httpbin. org»,
    «Агент пользователя»: «curl/7.43.0»
  },
  "json": ноль,
  "источник": "*.*.*.*",
  "url": "https://httpbin.org/post"
}
 

1

Требуется добавить альтернативу netcat

 #!/bin/bash
нк -л 8080 &
завиток "http://локальный:8080" \
-H "Принять: приложение/json" \
-H "Тип контента: приложение/json" \
--data @- <

--trace - работает с curl 7.58 и показывает вам тело POST:

 $ curl --trace - -d 'foo=bar' http://example.org
== Информация: URL перестроен на: http://example.org/
== Информация: Попытка 2606:2800:220:1:248:1893:25c8:1946...
== Информация: TCP_NODELAY установлен
== Информация: подключено к example.org (2606:2800:220:1:248:1893:25c8:1946), порт 80 (#0)
=> Отправить заголовок, 144 байта (0x90)
0000: 50 4f 53 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d POST/HTTP/1.1.
0010: 0a 48 6f 73 74 3a 20 65 78 61 6d 70 6c 65 2e 6f .Хост: пример. o
0020: 72 67 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 rg..User-Agent:
0030: 63 75 72 6c 2f 37 2e 35 38 2e 30 0d 0a 41 63 63 curl/7.58.0..Acc
0040: 65 70 74 3a 20 2a 2f 2a 0d 0a 43 6f 6e 74 65 6e ept: */*..Conten
0050: 74 2d 4c 65 6e 67 74 68 3a 20 37 0d 0a 43 6f 6e t-Длина: 7..Con
0060: 74 65 6е 74 2д 54 7970 65 3a 20 61 70 70 6c 69 Тип палатки: прикладной
0070: 63 61 74 69 6f 6e 2f 78 2d 77 77 77 2d 66 6f 72 катион/x-www-for
0080: 6d 2d 75 72 6c 65 6e 63 6f 64 65 64 0d 0a 0d 0a m-urlencoded....
=> Отправить данные, 7 байт (0x7)
0000: 66 6f 6f 3d 62 61 72 foo=бар
== Информация: загрузка полностью отправлена: 7 из 7 байт
<= Заголовок Recv, 17 байт (0x11)
0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 ОК.
0010:0а.
<= Заголовок Recv, 22 байта (0x16)
 

1

Вы можете использовать Charles и curl --proxy localhost:8888 . Простые!

4

Твой ответ

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

Использовать аргумент POST -X) – Curl Cookbook

Эти рецепты curl показывают, как отправлять запросы POST с помощью curl. По умолчанию curl отправляет запросы GET. Чтобы заставить его отправлять запросы POST, используйте аргумент командной строки -X POST . Чтобы добавить данные POST в запрос, используйте аргумент -d . Чтобы изменить заголовок Content-Type , сообщающий веб-серверу, какой тип данных вы отправляете, используйте параметр 9.0033 -H аргумент.

  1. Отправить пустой запрос POST
  2. Отправить запрос POST с данными формы
  3. Пропуск аргумента -X
  4. Более аккуратный способ POST данных
  5. Отправить запрос POST и выполнить перенаправление
  6. Отправить запрос POST с данными JSON
  7. Отправить запрос POST с данными XML
  8. Отправить запрос POST с данными в виде обычного текста
  9. Отправить запрос POST с данными из файла
  10. URL-кодирование POST-данных
  11. POST бинарный файл
  12. POST бинарный файл и установка его типа MIME
  13. POST двоичный файл и изменить его имя файла
    1. Отправить пустой запрос POST

       curl -X POST https://catonmat. net 

      В этом рецепте используется -X POST , который заставляет curl отправлять POST-запрос на https://catonmat.net . Получив ответ от сервера, он выводит тело ответа на экран. Он не отправляет никаких данных POST.

      Отправить запрос POST с данными формы

       curl -d 'login=emma&password=123' -X POST https://google.com/login 

      Этот рецепт отправляет запрос POST на https://google.com /login с данными login=emma&password=123 в теле запроса. При использовании 9Аргумент 0033 -d , curl также устанавливает для заголовка Content-Type значение application/x-www-form-urlencoded . Кроме того, если установлена ​​опция -d , аргумент -X POST можно пропустить, поскольку curl автоматически установит тип запроса POST.

      Пропуск аргумента -X

       curl -d 'login=emma&password=123' https://google.com/login 

      В этом рецепте мы пропускаем аргумент -X POST , который явно указывает curl отправить POST-запрос. Мы можем пропустить его, потому что мы указали -d аргумент. Когда используется -d , curl неявно устанавливает тип запроса POST.

      Более аккуратный способ POST-данных

       curl -d 'login=emma' -d 'password=123' https://google.com/login 

      В предыдущем рецепте использовалась одна опция -d для отправки всех data login=emma&password=123 , но вот более аккуратный способ сделать то же самое, что упрощает чтение команды. Вместо использования одного аргумента -d для всех данных используйте несколько -d аргумента для каждого ключ=значение фрагмента данных! Если вы это сделаете, curl объединит все фрагменты данных с символом разделителя и при создании запроса. Этот рецепт пропускает аргумент -X POST , поскольку при наличии аргумента -d curl неявно выполняет запрос POST.

      Отправить запрос POST и выполнить перенаправление

       curl -L -d 'tweet=hi' https://api. twitter.com/tweet 

      В этом рецепте используется параметр командной строки -L , который сообщает curl следуйте любым возможным перенаправлениям, которые могут встретиться на пути. По умолчанию curl не следует редиректам, поэтому вам нужно добавить -L , чтобы заставить его следовать за ними. Этот рецепт пропускает аргумент -X POST , поскольку аргумент -d заставляет curl выполнять запрос POST.

      Отправить запрос POST с данными JSON

       curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google. com/login 

      В этом рецепте curl отправляет запрос POST с данными JSON. Это достигается передачей JSON в параметр -d , а также использованием параметра -H 9.0034, который устанавливает для заголовка Content-Type значение application/json . Установка заголовка типа контента на application/json необходима, поскольку в противном случае веб-сервер не будет знать, какой это тип данных. Я также удалил аргумент -X POST , так как его можно пропустить, поскольку -d вызывает запрос POST.

      Отправить запрос POST с данными XML

       curl -d 'ann123' -H 'Content-Type: text/xml' https://google.com/логин 

      Этот рецепт отправляет XML-данные по адресу https://google.com/login . Как и данные формы и данные JSON, данные XML указываются в аргументе -d . Чтобы сообщить веб-серверу, что запрос содержит XML, заголовок Content-Type изменяется на text/xml с помощью аргумента -H .

      Отправить запрос POST с данными в виде простого текста текстовая строка

      hello world в теле запроса. Он также устанавливает для заголовка Content-Type значение text/plain , чтобы сообщить веб-серверу, что это просто текст.

      Отправить запрос POST с данными из файла https://google.

      com/login

    Этот рецепт загружает данные POST из файла с именем data.txt . Обратите внимание на дополнительный символ @ перед именем файла. Вот как вы сообщаете curl, что data.txt — это файл, а не просто строка, которая должна идти в теле POST.

    URL-encode Данные POST

     curl --data-urlencode 'comment=hello world' https://google.com/login 

    До сих пор все рецепты использовали аргумент -d для добавления данных POST к запросам. Этот аргумент предполагает, что ваши данные уже закодированы в URL. Если это не так, то могут быть некоторые проблемы. Если ваши данные не закодированы в URL-адресе, замените -d на --data-urlencode . Он работает точно так же, как -d , за исключением того, что данные кодируются URL-адресом с помощью curl перед отправкой по сети.

    POST двоичного файла

     curl -F '[email protected]' https://google.com/profile 

    В этом рецепте используется аргумент -F , который заставляет curl выполнять POST-запрос многокомпонентных данных формы. . Это более сложный тип контента, который более эффективен при отправке двоичных файлов. Этот рецепт заставляет curl прочитать изображение photo.png и загрузить его на https://google.com/profile с именем file . Аргумент -F также устанавливает Content-Type 9.0034 заголовка в multipart/form-data .

    ОТПРАВИТЬ двоичный файл и установить его тип MIME

     curl -F '[email protected];type=image/png' https://google.com/profile аргумент  -F  для загрузки двоичного файла (фотографии с именем файла  photo.png  ) через составной запрос POST. Он также указывает MIME-тип этого файла и устанавливает для него значение  image/png  . Если тип не указан, curl устанавливает его равным 9.0033 приложение/октет-поток  . 

    ОТПРАВИТЬ двоичный файл и изменить его имя файла

     curl -F '[email protected];filename=me.png' https://google.com/profile аргумент  -F  для загрузки  photo. png  через запрос POST. Кроме того, в этом рецепте имя файла, отправляемого на веб-сервер, изменено с  photo.png  на  me.png  . Веб-сервер видит только имя файла  me.png  и не знает, что исходное имя файла было  photo.png  . 

    Создано Browserling

    Эти рецепты завивки были записаны мной и моей командой в Browserling. Мы используем такие рецепты каждый день, чтобы добиться цели и улучшить наш продукт. Сам Browserling представляет собой онлайн-сервис кросс-браузерного тестирования, работающий на инопланетной технологии. Проверьте это!

    Секретное сообщение: Если вам нравится мой рецепт завитков, то и я люблю вас! Используйте код купона CURLLING, чтобы получить скидку в моей компании.

    Искусство написания сценариев HTTP-запросов с помощью Curl

    curl / Docs / Tool / HTTP-скрипты

    Предыстория

    Этот документ предполагает, что вы знакомы с HTML и общими сетями.

    Увеличение количества приложений, перемещаемых в Интернет, привело к тому, что "Сценарии HTTP" стали более востребованными и востребованными. Иметь возможность автоматически извлекать информацию из Интернета, подделывать пользователей, публиковать или загружать данные на веб-серверы — все это важные задачи сегодня.

    Curl — это инструмент командной строки для выполнения всех видов манипуляций с URL-адресами и их передачи, но в этом конкретном документе основное внимание будет уделено тому, как использовать его при выполнении HTTP-запросов для развлечения и получения прибыли. Я предполагаю, что вы знаете, как вызвать curl --help или curl --manual , чтобы получить основную информацию об этом.

    Программа Curl не предназначена для того, чтобы делать все за вас. Он делает запросы, получает данные, отправляет данные и извлекает информацию. Вероятно, вам нужно склеить все вместе, используя какой-то скриптовый язык или повторяющиеся ручные вызовы.

    Протокол HTTP

    HTTP — это протокол, используемый для получения данных с веб-серверов. Это простой протокол, основанный на TCP/IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько различных методов, как будет показано здесь.

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

    Клиент curl отправляет HTTP-запрос. Запрос содержит метод (например, GET, POST, HEAD и т. д.), ряд заголовков запроса и иногда тело запроса. HTTP-сервер отвечает строкой состояния (указывающей, все ли прошло хорошо), заголовками ответа и чаще всего также телом ответа. Часть «тело» — это запрошенные вами простые данные, такие как фактический HTML или изображение и т. д. команд, которые curl отправляет на сервер, а также несколько других информационных текстов.

    --verbose — самая полезная опция, когда дело доходит до отладки или даже понимания взаимодействия curl<->сервера.

    Иногда даже --verbose недостаточно. Затем --trace и --trace-ascii предлагают еще больше подробностей, поскольку они показывают все, что curl отправляет и получает. Используйте его так:

     curl --trace-ascii debugdump.txt http://www.example.com/
     

    См. тайминг

    Много раз вы можете задаться вопросом, что именно занимает все время, или вы просто хотите знать количество миллисекунд между двумя точками в передаче. Для тех и других подобных ситуаций --trace-time — это то, что вам нужно. Он будет добавлять время к каждой строке вывода трассировки:

     curl --trace-ascii d.txt --trace-time http://example.com/
     

    См. ответ

    По умолчанию curl отправляет ответ на стандартный вывод. Вам нужно перенаправить его куда-нибудь, чтобы избежать этого, чаще всего это делается с помощью -o или -O .

    Spec

    Формат унифицированного указателя ресурсов определяет адрес определенного ресурса в Интернете. Вы знаете это, вы видели такие URL-адреса, как https://curl.se или https://example.com, миллион раз. RFC 3986 - каноническая спецификация. И да, официальное имя не URL, а URI.

    Хост

    Имя хоста обычно преобразуется с помощью DNS или вашего файла /etc/hosts в IP-адрес, и это то, с чем curl будет взаимодействовать. В качестве альтернативы вы указываете IP-адрес непосредственно в URL-адресе вместо имени.

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

     curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/
     

    Номер порта

    Каждый поддерживаемый curl протокол работает с номером порта по умолчанию, будь то TCP или, в некоторых случаях, UDP. Обычно вам не нужно принимать это во внимание, но иногда вы запускаете тестовые серверы на других портах или подобных. Затем вы можете указать номер порта в URL-адресе с двоеточием и номером сразу после имени хоста. Например, при выполнении HTTP на порт 1234:

     завиток http://www.example.org:1234/
     

    Номер порта, который вы указываете в URL-адресе, — это номер, который сервер использует для предоставления своих услуг. Иногда вы можете использовать прокси-сервер, и тогда вам может потребоваться указать номер порта этого прокси-сервера отдельно от того, какой curl должен подключиться к серверу. Например, при использовании HTTP-прокси на порту 4321:

     curl --proxy http://proxy.example.org:4321 http://remote.example.org/
     

    Имя пользователя и пароль

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

    Вы можете либо вставить имя пользователя и пароль в URL-адрес, либо указать их отдельно:

     curl http://user:[email protected]/
     

    или

     curl -u пользователь: пароль http://example. org/
     

    Обратите внимание, что этот вид аутентификации HTTP не является тем, что обычно делается и запрашивается веб-сайтами, ориентированными на пользователя, в наши дни. Вместо этого они, как правило, используют формы и файлы cookie.

    Часть пути

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

    GET

    Самый простой и наиболее распространенный запрос/операция, выполняемая с использованием HTTP, — это ПОЛУЧИТЬ URL-адрес. Сам URL-адрес может относиться к веб-странице, изображению или файлу. Клиент отправляет запрос GET на сервер и получает запрошенный документ. Если вы введете командную строку

     curl https://curl.se
     

    вы получите веб-страницу, возвращенную в окно терминала. Весь HTML-документ, который содержит этот URL-адрес.

    Все ответы HTTP содержат набор заголовков ответа, которые обычно скрыты, используйте curl's --включите параметр ( -i ), чтобы отобразить их, а также остальную часть документа.

    HEAD

    Вы можете запросить у удаленного сервера ТОЛЬКО заголовки, используя параметр --head ( -I ), который заставит curl выдать запрос HEAD. В некоторых особых случаях серверы отвергают метод HEAD, в то время как другие все еще работают, что вызывает особое раздражение.

    Метод HEAD определен и сделан таким образом, что сервер возвращает заголовки точно так же, как и для GET, но без тела. Это означает, что вы можете увидеть Content-Length: в заголовках ответа, но в ответе HEAD не должно быть фактического тела.

    Одна командная строка curl может содержать один или несколько URL-адресов. Наиболее распространенным случаем, вероятно, является использование одного, но вы можете указать любое количество URL-адресов. Да любой. Без ограничений. Затем вы будете получать запросы, повторяющиеся снова и снова для всех заданных URL-адресов.

    Пример, отправьте два запроса GET:

     curl http://url1.example.com http://url2. example.com
     

    Если вы используете --data для POST на URL-адрес, использование нескольких URL-адресов означает, что вы отправляете один и тот же POST на все указанные URL-адреса.

    Пример, отправьте два сообщения POST:

     curl --data name=curl http://url1.example.com http://url2.example.com
     

    Иногда вам нужно работать с несколькими URL-адресами в одной командной строке и использовать разные методы HTTP для каждого. Для этого вам понравится опция --next . По сути, это разделитель, который отделяет несколько вариантов от следующего. Все URL до --next получит тот же метод и объединит все данные POST в один.

    Когда curl достигает --next в командной строке, он как бы сбрасывает метод и данные POST и разрешает новый набор.

    Возможно, это лучше всего показать на нескольких примерах. Чтобы отправить сначала HEAD, а затем GET:

     curl -I http://example.com --next http://example.com
     

    Чтобы сначала отправить POST, а затем GET:

     curl -d score=10 http://example. com/post.cgi --next http://example.com/results.html
     

    Объяснение форм

    Формы — это общий способ, с помощью которого веб-сайт может представить HTML-страницу с полями, в которые пользователь может ввести данные, а затем нажать какую-либо кнопку «ОК» или «Отправить», чтобы эти данные были отправлены на сервер. . Затем сервер обычно использует отправленные данные, чтобы решить, как действовать. Например, использование введенных слов для поиска в базе данных или добавление информации в систему отслеживания ошибок, отображение введенного адреса на карте или использование информации в качестве подсказки для входа в систему, подтверждающей, что пользователю разрешено видеть, о чем идет речь. увидеть.

    Конечно, на стороне сервера должна быть какая-то программа для приема отправляемых вами данных. Вы не можете просто изобрести что-то из воздуха.

    GET

    GET-форма использует метод GET, как указано в HTML, например:

     
    cgi">

    В вашем любимом браузере появится эта форма с текстовым полем для заполнения и кнопкой "ОК". Если вы заполните '1905' и нажмите кнопку OK, после чего ваш браузер создаст новый URL-адрес для вас. URL-адрес получит junk.cgi?birthyear=1905&press=OK , добавленный к части пути предыдущего URL-адреса.

    Если исходная форма была видна на странице www.example.com/when/birth.html , вторая страница, которую вы получите, станет www.example.com/when/junk.cgi?birthyear=1905&press= ОК .

    Так работает большинство поисковых систем.

    Чтобы заставить curl сделать сообщение формы GET для вас, просто введите ожидаемый созданный URL:

     curl "http://www.example.com/when/junk.cgi?birthyear=1905&press=OK"
     

    POST

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

    Затем протокол HTTP предлагает метод POST. Таким образом, клиент отправляет данные отдельно от URL-адреса, и поэтому вы не увидите их в поле URL-адреса.

    Форма будет похожа на предыдущую:

     

    И чтобы использовать curl для публикации этой формы с теми же данными, что и раньше, мы могли бы сделать это так:

     curl --data "birthyear=1905&press=%20OK%20" http://www .example.com/when/junk.cgi
     

    Этот тип POST будет использовать Content-Type application/x-www-form-urlencoded и является наиболее широко используемым типом POST.

    Данные, которые вы отправляете на сервер, ДОЛЖНЫ уже быть правильно закодированы, curl не сделает этого за вас. Например, если вы хотите, чтобы данные содержали пробел, вам нужно заменить этот пробел на %20 и т. д. Несоблюдение этого правила, скорее всего, приведет к тому, что ваши данные будут получены неправильно и испорчены.

    Последние версии curl могут на самом деле кодировать данные POST для вас, например:

     curl --data-urlencode "name=I am Daniel" http://www.example.com
     

    Если вы повторите --data несколько раз в командной строке, curl объединит все заданные фрагменты данных и поместит символы и между каждым сегментом данных.

    Загрузка файла POST

    Еще в конце 1995 года был определен дополнительный способ отправки данных через HTTP. Это задокументировано в RFC 1867, поэтому этот метод иногда называют RFC1867-posting.

    Этот метод в основном предназначен для лучшей поддержки загрузки файлов. Форма, позволяющая пользователю загрузить файл, может быть написана в HTML следующим образом:

     
    <тип ввода=имя файла=загрузить>

    Это ясно показывает, что Content-Type, который должен быть отправлен, имеет значение multipart/form-data .

    Чтобы опубликовать сообщение в подобной форме с помощью curl, введите команду, например:

     curl --form upload=@localfilename --form press=OK [URL]
     

    Скрытые поля

    Распространенным способом передачи информации о состоянии между страницами для приложений на основе HTML является добавление скрытых полей в формы. Скрытые поля уже заполнены, они не отображаются пользователю и передаются так же, как и все остальные поля.

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

     

    Чтобы отправить это с помощью curl, вам не придется думать о том, скрыты поля или нет. Для завивки они все одинаковые:

     curl --data "год рождения=1905&press=OK&person=daniel" [URL]
     

    Выясните, как выглядит POST

    Когда вы собираетесь заполнить форму и отправить ее на сервер с помощью curl вместо браузера, вы, конечно же, заинтересованы в том, чтобы отправить POST точно так же, как это делает ваш браузер.

    Простой способ увидеть это — сохранить HTML-страницу с формой на локальном диске, изменить «метод» на GET и нажать кнопку отправки (вы также можете изменить URL-адрес действия, если хотите к).

    Затем вы ясно увидите, что данные добавляются к URL-адресу, разделенному ? -письмо, как и должны быть формы GET.

    PUT

    Возможно, лучший способ загрузить данные на HTTP-сервер — использовать PUT. Опять же, для этого, конечно, требуется, чтобы кто-то поместил на сервер программу или скрипт, который знает, как получать HTTP-поток PUT.

    Поместите файл на HTTP-сервер с помощью curl:

     curl --upload-file uploadfile http://www.example.com/receive.cgi
     

    Базовая аутентификация

    HTTP-аутентификация — это возможность сообщить серверу ваше имя пользователя и пароль, чтобы он мог проверить, разрешено ли вам выполнять выполняемый вами запрос. Базовая аутентификация, используемая в HTTP (это тип, который curl использует по умолчанию), основана на простом тексте , что означает, что он отправляет имя пользователя и пароль, слегка запутанные, но все еще полностью читаемые любым, кто прослушивает сеть между вами и удаленным сервер.

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

     curl --имя пользователя:пароль http://www.example.com
     

    Другая аутентификация

    Для сайта может потребоваться другой метод аутентификации (проверьте заголовки, возвращаемые сервером), а затем --ntlm , --digest , --negotiate или даже --anyauth могут быть варианты, которые подходят вам.

    Аутентификация прокси-сервера

    Иногда доступ к HTTP возможен только при использовании прокси-сервера HTTP. Это, кажется, особенно распространено в различных компаниях. Прокси-серверу HTTP может потребоваться собственный пользователь и пароль, чтобы позволить клиенту получить доступ к Интернету. Чтобы указать те, у которых есть curl, запустите что-то вроде:

     curl --proxy-user proxyuser:proxypassword curl.se
     

    Если ваш прокси-сервер требует аутентификации с использованием метода NTLM, используйте --proxy-ntlm , если для этого требуется дайджест, используйте --proxy-digest .

    Если вы используете любую из этих опций пользователя и пароля, но пропускаете часть пароля, curl запросит пароль в интерактивном режиме.

    Скрытие учетных данных

    Обратите внимание, что при запуске программы ее параметры можно увидеть при просмотре списка запущенных процессов системы. Таким образом, другие пользователи смогут просматривать ваши пароли, если вы передадите их как простые параметры командной строки. Есть способы обойти это.

    Стоит отметить, что хотя HTTP-аутентификация работает именно так, многие веб-сайты не будут использовать эту концепцию, когда они предоставляют логины и т. д. См. главу «Вход через Интернет» ниже для получения более подробной информации об этом.

    Referer

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

    Используйте curl для установки поля реферера с помощью:

     curl --referer http://www.example.com http://www.example.com
     

    User Agent

    Подобно полю referer, все HTTP-запросы могут устанавливать поле User-Agent. Он указывает, какой пользовательский агент (клиент) используется. Многие приложения используют эту информацию, чтобы решить, как отображать страницы. Глупые веб-программисты пытаются создавать разные страницы для пользователей разных браузеров, чтобы они выглядели как можно лучше для их конкретных браузеров. Обычно они также используют различные виды JavaScript и т. д.

    Время от времени вы увидите, что получение страницы с помощью curl не возвращает ту же страницу, которую вы видите при получении страницы с помощью вашего браузера. Тогда вы знаете, что пришло время установить поле User Agent, чтобы обмануть сервер, заставив его думать, что вы один из этих браузеров.

    Чтобы curl выглядел как Internet Explorer 5 на компьютере с Windows 2000:

     curl --user-agent "Mozilla/4.0 (совместимый; MSIE 5.01; Windows NT 5.0)" [URL]
     

    Или почему бы не выглядеть так, будто вы используете Netscape 4.73 на старой Linux-системе:

     curl --user-agent "Mozilla/4.73 [ru] (X11; U; Linux 2.2.15 i686)" [URL]
     

    Перенаправления

    Когда ресурс запрашивается с сервера, ответ от сервера может включать подсказку о том, куда браузеру следует перейти, чтобы найти эту страницу, или новую страницу, содержащую вновь сгенерированный вывод. Заголовок, сообщающий браузеру о перенаправлении, — Location: .

    Curl не следует за заголовками Location: по умолчанию, но просто отображает такие страницы так же, как отображает все ответы HTTP. Однако у него есть опция, которая заставит его попытаться следовать Местоположение: указателя.

    Чтобы указать curl следовать по местоположению:

     curl --location http://www.example.com
     

    Если вы используете curl для POST на сайт, который немедленно перенаправляет вас на другую страницу, вы можете безопасно использовать --location ( -L ) и --data / --form вместе. Curl будет использовать POST только в первом запросе, а затем вернется к GET в следующих операциях.

    Другие перенаправления

    Браузеры обычно поддерживают по крайней мере два других способа перенаправления, которых не поддерживает curl: во-первых, html может содержать мета-тег обновления, который просит браузер загрузить определенный URL-адрес через заданное количество секунд, или он может использовать JavaScript для этого.

    Основы работы с файлами cookie

    Веб-браузеры осуществляют «управление состоянием на стороне клиента» с помощью файлов cookie. Файлы cookie — это просто имена с соответствующим содержимым. Файлы cookie отправляются клиенту сервером. Сервер сообщает клиенту, для какого пути и имени хоста он хочет, чтобы файл cookie был отправлен обратно, а также отправляет дату истечения срока действия и еще несколько свойств.

    Когда клиент связывается с сервером с именем и путем, указанными ранее в полученном файле cookie, клиент отправляет файлы cookie и их содержимое обратно на сервер, если, конечно, срок их действия не истек.

    Многие приложения и серверы используют этот метод для соединения серии запросов в один логический сеанс. Чтобы иметь возможность использовать curl в таких случаях, мы должны иметь возможность записывать и отправлять файлы cookie так, как их ожидает веб-приложение. Так же, как браузеры работают с ними.

    Параметры cookie

    Самый простой способ отправить несколько файлов cookie на сервер при получении страницы с curl — добавить их в командную строку, например:

     curl --cookie "name=Daniel" http://www. пример.com
     

    Файлы cookie отправляются как обычные заголовки HTTP. Это практично, поскольку позволяет curl записывать файлы cookie, просто записывая заголовки. Запишите файлы cookie с помощью curl, используя параметр --dump-header ( -D ), например:

     curl --dump-header headers_and_cookies http://www.example.com
     

    (Обратите внимание, что описанная ниже опция --cookie-jar является лучшим способом хранения файлов cookie.) сервера и использовать файлы cookie, которые были сохранены из предыдущего соединения (или созданы вручную, чтобы заставить сервер поверить, что у вас было предыдущее соединение). Чтобы использовать ранее сохраненные файлы cookie, вы запускаете curl, например:

     curl --cookie store_cookies_in_file http://www.example.com
     

    "Cookie Engine" Curl включается при использовании параметра --cookie . Если вы хотите, чтобы curl понимал только полученные файлы cookie, используйте --cookie с несуществующим файлом. Например, если вы хотите, чтобы curl понимал файлы cookie со страницы и следовал по местоположению (и, таким образом, возможно, отправлял полученные файлы cookie), вы можете вызвать его следующим образом:

     curl --cookie nada --location http://www.  пример.com
     

    Curl может читать и записывать файлы cookie, которые используют тот же формат файлов, который когда-то использовали Netscape и Mozilla. Это удобный способ обмена файлами cookie между сценариями или вызовами. Переключатель --cookie ( -b ) автоматически определяет, является ли данный файл таким файлом cookie, и анализирует его, а с помощью параметра --cookie-jar ( -c ) вы делаете curl записать новый файл cookie в конце операции:

     curl --cookie cookies.txt --cookie-jar newcookies.txt http://www.example.com
     

    HTTPS защищен HTTP

    Существует несколько способов безопасной передачи HTTP. На сегодняшний день наиболее распространенным протоколом для этого является то, что обычно известно как HTTPS, HTTP через SSL. SSL шифрует все данные, отправляемые и получаемые по сети, что затрудняет шпионаж конфиденциальной информации для злоумышленников.

    SSL (или TLS, как называется текущая версия стандарта) предлагает набор расширенных функций для безопасной передачи по протоколу HTTP.

    Curl поддерживает зашифрованные выборки, если он создан для использования библиотеки TLS, и его можно настроить для использования одной из довольно большого набора библиотек — curl -V покажет, для какого из них был создан ваш curl (если есть!). Чтобы получить страницу с HTTPS-сервера, просто запустите curl, например:

     curl https://secure.example.com
     

    Сертификаты

    В мире HTTPS вы используете сертификаты для подтверждения того, что вы являетесь тем, за кого себя выдаете, в дополнение к обычным паролям. Curl поддерживает клиентские сертификаты. Все сертификаты заблокированы парольной фразой, которую необходимо ввести, прежде чем curl сможет использовать сертификат. Парольную фразу можно указать в командной строке или, если нет, ввести интерактивно, когда curl запрашивает ее. Используйте сертификат с завитком на HTTPS-сервере, например:

     curl --cert mycert.pem https://secure.example.com
     

    curl также пытается проверить, является ли сервер тем, за кого себя выдает, путем проверки сертификата сервера по локально хранящемуся пакету сертификатов ЦС. Неудачная проверка приведет к тому, что curl откажет в соединении. Затем вы должны использовать --insecure ( -k ), если вы хотите указать curl игнорировать тот факт, что сервер не может быть проверен.

    Подробнее о проверке сертификата сервера и пакетах сертификатов ca можно прочитать в SSLCERTS документ.

    Иногда вы можете получить собственное хранилище сертификатов ЦС, и тогда вы можете указать curl использовать его для проверки сертификата сервера:

     curl --cacert ca-bundle.pem https://example.com/
     

    Делая необычные вещи, вам может понадобиться добавить или изменить элементы одного запроса curl.

    Например, вы можете изменить метод POST на PROPFIND и отправить данные как Content-Type: text/xml (вместо стандартного Content-Type ) следующим образом:

     curl --data "" --header "Content-Type: text/xml" --request PROPFIND example.com
     

    Вы можете удалить заголовок по умолчанию, предоставив его без содержания. Например, вы можете испортить запрос, отрезав заголовок Host: :

     curl --header "Host:" http://www.example.com
     

    Таким же образом можно добавить заголовки. Вашему серверу может потребоваться заголовок Destination: , и вы можете добавить его:

     curl --header "Destination: http://nowhere" http://example.com
     

    Подробнее об измененных методах

    Следует отметить, что curl самостоятельно выбирает, какие методы использовать, в зависимости от запрашиваемого действия. -d будет выполнять POST, -I будет выполнять HEAD и так далее. Если вы используете параметр --request / -X , вы можете изменить выбор ключевого слова метода, но вы не измените поведение curl. Это означает, что если вы, например, используете -d "данные" для выполнения POST, вы можете изменить метод на PROPFIND с -X и curl все равно будет думать, что отправляет POST . Вы можете изменить обычный метод GET на метод POST, просто добавив -X POST в командную строку, например:

     curl -X POST http://example. org/
     

    ... но curl по-прежнему будет думать и действовать так, как если бы он отправил GET, поэтому он не будет отправлять тело запроса и т. д.

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

    Также можно отметить, что для того, чтобы сделать это должным образом в автоматическом режиме, вам, безусловно, потребуется создавать сценарии и выполнять несколько вызовов curl и т. д.

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

    Некоторые веб-системы входа в систему содержат различное количество JavaScript, и иногда они используют такой код для установки или изменения содержимого файлов cookie. Возможно, они делают это, чтобы предотвратить запрограммированный вход в систему, как это руководство описывает, как... В любом случае, если чтения кода недостаточно, чтобы позволить вам повторить поведение вручную, захват HTTP-запросов, сделанных вашими браузерами, и анализ отправленных файлов cookie обычно рабочий метод, чтобы решить, как сократить потребность в JavaScript.

    Фактически

    Тег для входа в систему, многие сайты заполняют случайные/сеансовые или иным образом тайно сгенерированные скрытые теги, и вам может потребоваться сначала захватить HTML-код для формы входа и извлечь все скрытые поля, чтобы иметь возможность делать правильный логин POST. Помните, что содержимое должно быть закодировано в URL-адресе при отправке обычным POST.

    Некоторые приемы отладки

    Много раз, когда вы запускаете curl на сайте, вы замечаете, что сайт не отвечает на ваши запросы curl так же, как на запросы вашего браузера.

    Затем вам нужно начать делать ваши запросы curl более похожими на запросы вашего браузера:

    • Используйте параметр --trace-ascii для хранения полных подробных журналов запросов для облегчения анализа и лучшего понимания

    • Убедитесь, что вы проверяете и используете файлы cookie, когда это необходимо (как для чтения с помощью --cookie , так и для записи с помощью --cookie-jar )

    • Установите пользовательский агент (с -A ) на единицу, как это делает недавний популярный браузер

    • Установить ссылку (с -E ) так же, как это установлено в браузере

    • Если вы используете POST, убедитесь, что вы отправляете все поля и в том же порядке, что и браузер.