Как использовать curl для получения запроса GET точно так же, как при использовании Chrome?

У меня есть веб-API http://something.com/api, и я хочу использовать GET для получения тела ответа.

Это моя команда:

curl "http://something.com/api"

Конечно, он терпит неудачу и дает сообщение об ошибке.

Когда я использую Chrome и ввожу вышеуказанный URL-адрес, все правильно. Однако я делаю то же самое с Firefox, URL-адрес дает мне то же сообщение об ошибке. Я пытаюсь повторить действие с расширением Chrome DHC, запрос снова дает правильный ответ. После некоторых поисков я считаю, что вариант завитка --user-agent имеет значение. Как правильно установить пользовательский агент в Chrome? Или дело не в этом, проблема идет из других областей? Большое Вам спасибо.


person wdetac    schedule 27.02.2015    source источник


Ответы (3)


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

curl -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

Обновлена ​​форма пользовательского агента новейшей версии Chrome от 22 февраля 2021 г.


Использование прокси-инструмента, такого как Charles Proxy, действительно помогает быстро справиться с тем, о чем вы просите. Вот что я делаю, используя эту SO-страницу в качестве примера (по состоянию на июль 2015 года с использованием Charles версии 3.10):

  1. Запустите Charles Proxy
  2. Сделать веб-запрос с помощью браузера
  3. Найти нужный запрос в Charles Proxy
  4. Щелкните правой кнопкой мыши запрос в Charles Proxy.
  5. Выберите «Копировать запрос cURL»

Копировать пример запроса cURL в Charles 3.10.2

Теперь у вас есть запрос cURL, который вы можете запустить в терминале, который будет отражать запрос, сделанный вашим браузером. Вот как выглядел мой запрос на эту страницу (с удаленным заголовком cookie):

curl -H "Host: stackoverflow.com" -H "Cache-Control: max-age=0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" -H "HTTPS: 1" -H "DNT: 1" -H "Referer: https://www.google.com/" -H "Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,es;q=0.4" -H "If-Modified-Since: Thu, 23 Jul 2015 20:31:28 GMT" --compressed http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome
person Mike Grace    schedule 23.07.2015
comment
Было бы намного лучше, если бы Чарльз поддерживал копирование/экспорт нескольких запросов cURL за один раз. - person wiser; 05.03.2018
comment
Некоторые API, такие как ArcGIS, будут учитывать только заголовок Accept: text/html для принудительного вывода HTML. - person sventechie; 25.07.2018
comment
curl -A agent_name - это короткий путь - person ppostma1; 10.09.2018

Откройте инструменты разработчика Chrome, перейдите на вкладку «Сеть», отправьте запрос (возможно, вам потребуется установить флажок «Сохранить журнал», если страница обновится). Найдите запрос слева, щелкните правой кнопкой мыши «Копировать как cURL».

person hoodslide    schedule 05.03.2018
comment
Но срок действия файла cookie в Copy as cURL истекает в течение нескольких минут. По крайней мере, на большинстве сайтов. Как я могу автоматизировать получение нового файла cookie? - person Gaurav Kansal; 23.04.2020

Проверьте заголовки HTTP, которые хром отправляет с запросом (используя расширение браузера или прокси-сервер), затем попробуйте отправить те же заголовки с помощью CURL - возможно, по одному, пока вы не выясните, какие заголовки заставляют работать запрос.

curl -A [агент пользователя] -H [заголовки] "http://something.com/api"

person MegaAppBear    schedule 27.02.2015
comment
Я не знаком с этим. Можете ли вы привести несколько реальных примеров установки пользовательского агента в chrome и возможные заголовки? - person wdetac; 03.03.2015