2015-02-27 6 views
28

Mam api WWW http://something.com/api i chcę użyć GET, aby uzyskać ciało odpowiedzi.Jak użyć zwijania, aby uzyskać żądanie GET dokładnie tak samo jak przy użyciu Chrome?

To jest moje polecenie:

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

Oczywiście, że nie i daje komunikat o błędzie.

Kiedy używam Chrome i wprowadzam powyższy URL, wszystko jest poprawne. Jednak robię to samo z Firefoksem, adres URL daje mi ten sam komunikat o błędzie. Próbuję powtórzyć akcję z rozszerzeniem Chrome DHC, żądanie ponownie daje poprawną odpowiedź. Po pewnym przeszukaniu uważam, że opcja zwijania się ma znaczenie. Jaki jest prawidłowy sposób ustawienia klienta użytkownika na Chrome? Czy nie o to chodzi, problem pochodzi z innych dziedzin? Dziękuję Ci bardzo.

Odpowiedz

40

Jeśli trzeba ustawić ciąg nagłówka użytkownik w żądaniu Curl, można skorzystać z opcji -H ustawić agenta użytkownika, takich jak:

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 

Korzystanie z funkcji proxy jak Charles Proxy naprawdę pomaga uczynić krótką pracę coś takiego, o co prosicie. Oto co zrobić, używając tej SO stronę jako przykład (od lipca 2015 przy użyciu Charles wersja 3.10):

  1. Get Charles Proxy działa
  2. wystąpienia z wnioskiem internetowej za pomocą przeglądarki
  3. Znajdź odpowiednie żądanie w Charles proxy
  4. prawym przyciskiem myszy na życzenie w Charles proxy
  5. wybierz 'Kopiuj cURL żądanie'

Copy cURL Request example in Charles 3.10.2

Masz teraz żądanie cURL, które możesz uruchomić w terminalu, które będzie odzwierciedlało żądanie przeglądarki. Oto co moja prośba do tej strony wyglądało (z nagłówkiem ciasteczka usunięte):

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 
+1

Dziękuję, 'curl -H' działa jak urok! – Ginkgo

+0

Byłoby znacznie lepiej, gdyby Charles wspierał kopiowanie/eksportowanie wielu żądań cURL za jednym zamachem – wiser

1

Sprawdź nagłówki HTTP wysyłane przez chrome wraz z żądaniem (przy użyciu rozszerzenia przeglądarki lub serwera proxy), a następnie spróbuj wysłać te same nagłówki za pomocą CURL - Prawdopodobnie jeden po drugim, dopóki nie dowiesz się, który nagłówek (nagłówki) sprawia, że ​​żądanie działa.

curl -A [user-agent] H [nagłówki] "http://something.com/api"

+0

Nie znam tego. Czy możesz podać mi jakieś prawdziwe przykłady ustawiania user-agent na chrome i możliwe nagłówki? – wdetac

1

Otwórz Chrome Developer Tools, przejdź do zakładki Network, dokonaj żądanie (może trzeba sprawdzić „Zachowaj log”, jeżeli strona odświeża). Znajdź żądanie po lewej stronie, kliknij prawym przyciskiem myszy, "Kopiuj jako cURL".

Powiązane problemy