ฉันเขียนสคริปต์ทุบตีที่ได้รับผลลัพธ์จากเว็บไซต์โดยใช้ curl และทำการจัดการสตริงจำนวนมากบนเอาต์พุต html ปัญหาคือเมื่อฉันรันกับไซต์ที่ส่งคืนเอาต์พุต gzipped ไปที่ไซต์ในเบราว์เซอร์ทำงานได้ดี
เมื่อฉันใช้ curl ด้วยมือฉันจะได้รับเอาต์พุต gzipped:
$ curl "http://example.com"
นี่คือส่วนหัวจากไซต์นั้น ๆ :
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
ฉันรู้ว่าข้อมูลที่ส่งคืนเป็น gzipped เนื่องจากส่งคืน html ตามที่คาดไว้:
$ curl "http://example.com" | gunzip
ฉันไม่ต้องการไพพ์เอาต์พุตผ่าน gunzip เพราะสคริปต์ทำงานเหมือนที่เป็นอยู่ในไซต์อื่น ๆ และการส่งผ่าน gzip จะทำลายฟังก์ชันนั้น
สิ่งที่ฉันพยายาม
- การเปลี่ยน user-agent (ฉันลองใช้สตริงเดียวกันกับที่เบราว์เซอร์ส่ง "Mozilla / 4.0" ฯลฯ )
- คนขด
- ค้นหา Google
- กำลังค้นหา stackoverflow
ทุกอย่างกลับมาว่างเปล่า
ความคิดใด ๆ ?
curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
) - แก้ไขได้โดยการลบออกbr
จากAccept-Encoding
ไฟล์. ดูstackoverflow.com/questions/18983719/…