การส่ง URL ด้วยเครื่องหมายวงเล็บไปยัง curl


305

หากฉันพยายามส่ง URL ไปยัง curl ที่มีเครื่องหมายวงเล็บมันจะล้มเหลวโดยมีข้อผิดพลาด:

$ curl 'http://www.google.com/?TEST[]=1'
curl: (3) [globbing] illegal character in range specification at pos 29

อย่างไรก็ตามหากฉันหลีกเลี่ยงวงเล็บทั้งสองมันจะทำงานได้:

$ curl 'http://www.google.com/?TEST\[\]=1'

น่าสนใจฉันใช้แบ็กสแลชเพื่อหลบหนีเฉพาะวงเล็บแรกที่ล้มเหลวอย่างเงียบ ๆ ด้วยรหัสข้อผิดพลาด 20497:

$ curl 'http://www.google.com/?TEST\[]=1'
$ echo $!
20497

คำถามของฉันคือวิธีแก้ไขปัญหานี้สำหรับกรณีทั่วไปหรือไม่ มีอาร์กิวเมนต์ที่จะหนี URL โดยอัตโนมัติหรือคำอธิบายของตัวละครที่ต้องหลบหนีก่อนที่จะผ่านไปขด

คำตอบ:


482

ไม่เป็นไรฉันพบมันในเอกสาร:

-g/--globoff
              This  option  switches  off  the "URL globbing parser". When you set this option, you can
              specify URLs that contain the letters {}[] without having them being interpreted by  curl
              itself.  Note  that  these  letters  are not normal legal URL contents but they should be
              encoded according to the URI standard.

10
สำหรับฉันมันไม่ทำงาน ฉันต้องเพิ่ม \ ก่อนวงเล็บเหลี่ยมแต่ละอัน
jesusperaltac

@jesusperaltac เหมือนกันสำหรับฉันกับ macOS
Jean

สำหรับฉันมันใช้งานได้ - บน OS X High Sierr, curl 7.54.0 (x86_64-apple-darwin17.0) libcurl / 7.54.0
Shade

1
@Jean @jesusperaltac สำหรับฉันมันใช้งานได้บน windows หากคำสั่งคือcurl -L -o <local_file_name> -g <url>
Steven Liang

ทำงานให้ฉัน CentOS 7.1 Curl เวอร์ชั่น 7.29.0 (x86_64-redhat-linux-gnu) libcurl / 7.29.0)
PatS

0

globbing\วงเล็บใช้จึงจำเป็นที่จะต้องหลบหนีพวกเขาด้วยการเฉือน อีกวิธีหนึ่งสวิตช์บรรทัดคำสั่งต่อไปนี้จะปิดการใช้งานแบบวงกลม:

--globoff(หรือเวอร์ชั่นสั้นตัวเลือก: -g)

Ex:

curl --globoff https://www.google.com?test[]=1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.