Bir GET isteği almak için curl nasıl Chrome'la tamamen aynı şekilde kullanılır?


87

Bir web API'm var http://something.com/apive yanıt gövdesini almak için GET'i kullanmak istiyorum.

Bu benim emrim:

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

Tabii ki başarısız oluyor ve bir hata mesajı veriyor.

Chrome'u kullandığımda ve yukarıdaki url'yi girdiğimde her şey doğru. Ancak Firefox ile aynı şeyleri yapıyorum, url bana aynı hata mesajını veriyor. İşlemi Chrome DHC uzantısı ile tekrar etmeye çalışıyorum, istek tekrar doğru yanıtı veriyor. Biraz araştırdıktan sonra curl seçeneğinin --user-agentbir fark yarattığına inanıyorum . Kullanıcı aracısını Chrome'a ​​ayarlamanın doğru yolu nedir? Yoksa mesele bu değil, sorun başka alanlardan mı geliyor? Çok teşekkür ederim.

Yanıtlar:


123

Curl isteğinde kullanıcı başlığı dizesini ayarlamanız gerekiyorsa, aşağıdaki -Hgibi kullanıcı aracısını ayarlamak için seçeneği kullanabilirsiniz :

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 gibi bir proxy aracı kullanmak, gerçekten istediğiniz gibi bir şeyin kısa sürede çalışmasını sağlar. İşte bu SO sayfasını örnek olarak kullanarak yaptığım şey (Temmuz 2015 itibarıyla Charles sürüm 3.10 kullanılarak):

  1. Charles Proxy'yi çalıştırın
  2. Tarayıcı kullanarak web talebinde bulunun
  3. Charles Proxy'de istenen isteği bulun
  4. Charles Proxy'de istek üzerine sağ tıklayın
  5. 'CURL İsteğini Kopyala'yı seçin

Charles 3.10.2'de cURL İsteği örneğini kopyala

Artık tarayıcınızın yaptığı isteği yansıtacak bir terminalde çalıştırabileceğiniz bir cURL isteğiniz var. Bu sayfaya yönelik isteğim şöyle görünüyordu (çerez başlığı kaldırılmış halde):

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

Charles, tek seferde birden fazla cURL isteğinin kopyalanmasını / dışa aktarılmasını desteklese çok daha iyi olurdu
daha akıllıca

ArcGIS gibi bazı API'ler, Accept: text/htmlHTML çıktısını zorlamak için yalnızca başlığa saygı gösterir.
sventechie

2
curl -A ajan_adı kısa yol
ppostma1

26

Chrome Geliştirici Araçlarını açın, Ağ sekmesine gidin, istekte bulunun (sayfa yenilenirse "Günlüğü Koru" seçeneğini işaretlemeniz gerekebilir). Soldaki isteği bulun, sağ tıklayın, "cURL olarak kopyala" yı tıklayın.


Ancak "cURL olarak kopyala" içindeki çerezin süresi birkaç dakika içinde dolar. En azından sitelerin çoğunda. Yeni çerez almak için nasıl otomatikleştirebilirim?
Gaurav Kansal

6

Chrome'un istekle birlikte gönderdiği HTTP üstbilgilerini kontrol edin (Tarayıcı uzantısı veya proxy kullanarak), ardından aynı üstbilgileri CURL ile göndermeyi deneyin - İsteğin hangi başlıkların çalıştığını bulana kadar muhtemelen birer birer.

curl -A [kullanıcı aracısı] -H [başlıklar] " http://something.com/api "


Ben aşina değilim. User-agent'ı chrome'a ​​ve olası başlıklara ayarlamak için bana bazı gerçek örnekler verebilir misiniz?
wdetac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.