2015-02-27 20 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".