Як використовувати curl, щоб отримати запит GET точно такий же, як за допомогою Chrome?


85

У мене є веб-api, http://something.com/apiі я хочу використовувати GET, щоб отримати тіло відповіді.

Це моя команда:

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

Звичайно, це не вдається і видає повідомлення про помилку.

Коли я використовую Chrome і ввожу вказану вище URL-адресу, все правильно. Однак я роблю те саме з Firefox, URL-адреса дає мені те саме повідомлення про помилку. Я намагаюся повторити дію з розширенням Chrome DHC, запит знову дає правильну відповідь. Після деяких пошуків, я вважаю, що варіант завивки--user-agent має значення. Який правильний спосіб встановити для користувача агента Chrome? Або справа не в цьому, проблема походить з інших сфер? Дуже дякую.

Відповіді:


122

Якщо вам потрібно встановити рядок заголовка користувача в запиті на завивку, ви можете скористатися -Hопцією для встановлення агента користувача, наприклад:

curl -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" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

Використання проксі-інструменту, такого як Чарльз Проксі, насправді допомагає коротко опрацювати щось на зразок того, про що ви просите. Ось що я роблю, використовуючи на прикладі цю сторінку SO (станом на липень 2015 року, використовуючи версію Charles 3.10):

  1. Запустіть Чарльза Проксі
  2. Зробіть веб-запит за допомогою браузера
  3. Знайдіть бажаний запит у Чарльзі Проксі
  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

Було б набагато краще, якби Чарльз підтримував копіювання / експортування декількох запитів cURL за один раз
мудріше

Деякі API, такі як ArcGIS, будуть поважати лише Accept: text/htmlзаголовок, щоб змусити виводити HTML.
sventechie

2
curl -Агент_ім'я - це короткий шлях
ppostma1

23

Відкрийте Chrome Developer Tools, перейдіть на вкладку «Мережа», зробіть свій запит (можливо, вам доведеться встановити прапорець «Зберегти журнал», якщо сторінка оновлюється). Знайдіть запит ліворуч, клацніть правою кнопкою миші, "Копіювати як curl".


Але термін дії файлу cookie в "Копіювати як curl" закінчується протягом декількох хвилин. Принаймні у випадку більшості сайтів. Як я можу автоматизувати його для отримання нового файлу cookie?
Гаурав Кансал,

6

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

curl -A [user-agent] -H [заголовки] " http://something.com/api "


Я не знайомий з цим. Чи можете ви дати мені кілька реальних прикладів для встановлення для агента користувача chrome та можливих заголовків?
wdetac 03.03.15
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.