curl을 사용하여 Chrome을 사용하는 것과 똑같은 GET 요청을 얻는 방법은 무엇입니까?


85

웹 API가 http://something.com/api있고 GET을 사용하여 응답 본문을 얻고 싶습니다.

이것은 내 명령입니다.

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

물론 실패하고 오류 메시지가 표시됩니다.

Chrome을 사용하고 위의 URL을 입력하면 모든 것이 정확합니다. 그러나 Firefox에서 동일한 작업을 수행하면 URL에 동일한 오류 메시지가 표시됩니다. Chrome 확장 프로그램 DHC로 작업을 반복하려고 시도하면 요청이 다시 올바른 응답을 제공합니다. 몇 가지 검색 후 컬 옵션 --user-agent이 차이를 만든다고 생각합니다 . 사용자 에이전트를 Chrome으로 설정하는 올바른 방법은 무엇입니까? 아니면 이것이 요점이 아니라 다른 분야에서 문제가 발생합니까? 대단히 감사합니다.

답변:


122

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

Charles Proxy 와 같은 프록시 도구를 사용하면 요청하는 것과 같은 짧은 작업을 할 수 있습니다. 다음은이 SO 페이지를 예로 사용하여 수행하는 작업입니다 (2015 년 7 월 Charles 버전 3.10 사용).

  1. Charles Proxy 실행
  2. 브라우저를 사용하여 웹 요청하기
  3. Charles Proxy에서 원하는 요청 찾기
  4. Charles Proxy에서 요청을 마우스 오른쪽 버튼으로 클릭하십시오.
  5. 'cURL 요청 복사'를 선택하십시오.

Charles 3.10.2의 cURL 요청 예제 복사

이제 브라우저의 요청을 미러링하는 터미널에서 실행할 수있는 cURL 요청이 있습니다. 이 페이지에 대한 내 요청은 다음과 같습니다 (쿠키 헤더가 제거됨).

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

찰스가 지원 한 번에 여러 컬 요청을 / 복사 수출 있다면 그것은 훨씬 더 좋을 것이다
현명한

ArcGIS와 같은 일부 API는 Accept: text/htmlHTML 출력을 강제하기 위해 헤더 만 고려합니다 .
sventechie

2
curl -A agent_name은 지름길입니다.
ppostma1

23

Chrome 개발자 도구를 열고 네트워크 탭으로 이동하여 요청합니다 (페이지가 새로 고침되면 '로그 보존'을 선택해야 할 수 있음). 왼쪽에서 요청을 찾아 마우스 오른쪽 버튼으로 "Copy as cURL"을 클릭합니다.


그러나 "Copy as cURL"의 쿠키는 몇 분 내에 만료됩니다. 적어도 대부분의 사이트의 경우. 새 쿠키를 가져 오도록 자동화하려면 어떻게해야합니까?
Gaurav Kansal

6

크롬이 요청 (브라우저 확장 또는 프록시 사용)과 함께 보내는 HTTP 헤더를 확인한 다음 CURL로 동일한 헤더를 보내십시오. 요청이 작동하는 헤더를 파악할 때까지 한 번에 하나씩 가능합니다.

curl -A [사용자 에이전트] -H [헤더] " http://something.com/api "


나는 그것에 익숙하지 않다. user-agent를 크롬 및 가능한 헤더로 설정하는 실제 예제를 제공 할 수 있습니까?
wdetac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.