2011-12-03 33 views
91

Curl kullanarak bir web sitesinden çıktı alır ve html çıktısında bir dizi dize manipülasyonu yapan bir bash komut dosyası yazdım. Sorun, çıktılarını döndüren bir siteye karşı çalıştırdığım zamandır. Siteye bir tarayıcıda gitmek iyi çalışıyor. İşte Kıvrılma kullanırken gzip bir sayfa nasıl düzgün şekilde kullanılır?

$ curl "http://example.com" 

o belirli sitesinden başlık var: Ben elle bukle çalıştırdığınızda

, ben gzip çıktı almak bu döndürdüğü için, ben döndürülen veri gzipli olduğunu biliyoruz

HTTP/1.1 200 OK 
Server: nginx 
Content-Type: text/html; charset=utf-8 
X-Powered-By: PHP/5.2.17 
Last-Modified: Sat, 03 Dec 2011 00:07:57 GMT 
ETag: "6c38e1154f32dbd9ba211db8ad189b27" 
Expires: Sun, 19 Nov 1978 05:00:00 GMT 
Cache-Control: must-revalidate 
Content-Encoding: gzip 
Content-Length: 7796 
Date: Sat, 03 Dec 2011 00:46:22 GMT 
X-Varnish: 1509870407 1509810501 
Age: 504 
Via: 1.1 varnish 
Connection: keep-alive 
X-Cache-Svr: p2137050.pubip.peer1.net 
X-Cache: HIT 
X-Cache-Hits: 425 

html Beklendiği gibi:

$ curl "http://example.com" | gunzip 

Komut dosyası çalışırken çıktıyı gunzip ile borulamak istemiyorum diğer sitelerde olduğu gibi, ve gzip ile borulama bu işlevselliği bozardı. Ben kullanıcı aracısı değişen

  1. denedim ne

  2. adam kıvrılıp (benim tarayıcınızın gönderdiği aynı dizeyi, "Mozilla/4.0", vb çalıştı)
  3. google search
  4. stackoverflow arama

Her şey

kadar boş geldi

Herhangi bir fikrin var mı?

cevap

181

curl otomatik --compressed bayrağı ayarlarsanız yanıtı sıkıştırması: (HTTP) isteği algoritmalarından biri desteklere Libcurl kullanarak sıkıştırılmış tepki --compressed

curl --compressed "http://example.com" 

ve kaydedin sıkıştırılmamış belge. Bu seçenek kullanılırsa ve sunucu desteklenmeyen bir kodlama gönderirse, curl bir hata bildirir.

gzip büyük olasılıkla desteklenir, ancak curl -V çalışan ve bir yere "Özellikler" satırında libz bakarak kontrol edebilirsiniz: gerçekten web sitesi olduğunu

$ curl -V 
... 
Protocols: ... 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 

Not söz konusu olan buradaki sorun. curl bir Accept-Encoding: gzip istek üstbilgisini iletmediyse, sunucu sıkıştırılmış bir yanıt göndermemelidir.

+0

Güzel! Bir şampiyon gibi çalışır. Teşekkür ederim. – BryanH

+3

+1 sonunda 4 saatlik bir arama sona erdi - sıkıştırılmış. Teşekkürler! – Eugene

+17

Bu bir curl hatası gibi görünecektir, çünkü kod çözme isteğine göre yanıtı tetiklemelidir çünkü (gzip'i desteklediğinden). HTTP 1.1'den alıntı yapmak için: "Bir istekte Accept-Encoding alanı yoksa, sunucu, istemcinin herhangi bir içerik kodlamasını kabul edeceğini varsayabilir." Ancak, bu durumda sunucuların içeriği kodlamaması gerektiğini söylemektedir, hmm, figürü git. –

İlgili konular