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

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

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

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

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

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

3 ответа

Решение

Если вам нужно установить строку заголовка пользователя в запросе curl, вы можете использовать -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://stackru.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

Использование прокси-инструмента, такого как 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: stackru.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://stackru.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

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

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

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

Другие вопросы по тегам