จะใช้ curl เพื่อรับคำขอ GET เหมือนกับการใช้ Chrome ได้อย่างไร


87

ฉันมีเว็บ API http://something.com/apiและฉันต้องการใช้ GET เพื่อรับเนื้อหาตอบกลับ

นี่คือคำสั่งของฉัน:

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

แน่นอนมันล้มเหลวและมีข้อความแสดงข้อผิดพลาด

เมื่อฉันใช้ Chrome และป้อน URL ด้านบนทุกอย่างถูกต้อง อย่างไรก็ตามฉันทำสิ่งเดียวกันกับ Firefox url ทำให้ฉันมีข้อความแสดงข้อผิดพลาดเดียวกัน ฉันพยายามทำซ้ำการดำเนินการกับ DHC ส่วนขยาย Chrome คำขอให้การตอบสนองที่ถูกต้องอีกครั้ง หลังจากการค้นหาบางครั้งฉันเชื่อว่าตัวเลือก curl --user-agentสร้างความแตกต่าง วิธีที่ถูกต้องในการตั้งค่า User Agent เป็น Chrome คืออะไร หรือนี่ไม่ใช่ประเด็นปัญหามาจากสาขาอื่น? ขอบคุณมาก.

คำตอบ:


123

หากคุณต้องการตั้งค่าสตริงส่วนหัวผู้ใช้ในคำขอ curl คุณสามารถใช้-Hตัวเลือกเพื่อตั้งค่าตัวแทนผู้ใช้เช่น:

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ช่วยให้ทำงานสั้น ๆ เช่นสิ่งที่คุณกำลังถามได้ นี่คือสิ่งที่ฉันทำโดยใช้หน้า SO นี้เป็นตัวอย่าง (ณ เดือนกรกฎาคม 2015 โดยใช้ Charles เวอร์ชัน 3.10):

  1. เรียกใช้ Charles Proxy
  2. ขอเว็บโดยใช้เบราว์เซอร์
  3. ค้นหาคำขอที่ต้องการใน Charles Proxy
  4. คลิกขวาตามคำขอใน Charles Proxy
  5. เลือก 'คัดลอกคำขอ cURL'

คัดลอกตัวอย่างคำขอ cURL ใน Charles 3.10.2

ขณะนี้คุณมีคำขอ cURL ที่คุณสามารถเรียกใช้ในเทอร์มินัลที่จะจำลองคำขอที่เบราว์เซอร์ของคุณสร้างขึ้น นี่คือสิ่งที่คำขอของฉันไปยังหน้านี้ (โดยลบส่วนหัวคุกกี้ออก):

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 สนับสนุนการคัดลอก / ส่งออกคำขอ cURL หลายรายการในครั้งเดียว
ฉลาดกว่านี้

API บางตัวเช่น ArcGIS จะเคารพเฉพาะAccept: text/htmlส่วนหัวในการบังคับเอาต์พุต HTML
sventechie

2
curl -A agent_name เป็นคำย่อ
ppostma1

26

เปิดเครื่องมือสำหรับนักพัฒนา Chrome ไปที่แท็บเครือข่ายส่งคำขอของคุณ (คุณอาจต้องตรวจสอบ "เก็บบันทึก" หากรีเฟรชหน้า) ค้นหาคำขอทางด้านซ้ายคลิกขวา "คัดลอกเป็น cURL"


แต่คุกกี้ใน "คัดลอกเป็น cURL" จะหมดอายุภายในไม่กี่นาที อย่างน้อยที่สุดในกรณีของเว็บไซต์ส่วนใหญ่ ฉันจะเรียกคุกกี้ใหม่โดยอัตโนมัติได้อย่างไร
Gaurav Kansal

6

ตรวจสอบส่วนหัว HTTP ที่ chrome ส่งมาพร้อมกับคำขอ (โดยใช้ส่วนขยายเบราว์เซอร์หรือพร็อกซี) จากนั้นลองส่งส่วนหัวเดียวกันกับ CURL - อาจเป็นไปได้ทีละรายการจนกว่าคุณจะทราบว่าส่วนหัวใดที่ทำให้คำขอทำงานได้

curl -A [user-agent] -H [headers] " http://something.com/api "


ฉันไม่คุ้นเคยกับมัน คุณช่วยยกตัวอย่างจริงสำหรับการตั้งค่า user-agent เป็น chrome และส่วนหัวที่เป็นไปได้ให้ฉันได้ไหม
wdetac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.