วิธีรวมอักขระ '&' ในคำสั่ง bash curl


100

ฉันพยายามใช้ curl in bash เพื่อดาวน์โหลดหน้าเว็บ แต่&สัญลักษณ์ใน URL ไม่ได้รับการตีความว่าเป็นอักขระอย่างที่ฉันต้องการ มีความคิดอย่างไรที่ฉันจะโน้มน้าวทุบตีว่าสัญลักษณ์&นั้นเป็นเพียงตัวละครที่น่าเบื่อและไม่มีอะไรพิเศษ?


ดูหัวข้อต่อไปนี้จะช่วยคุณได้ - stackoverflow.com/questions/2067969/…
morgents

ฉันได้พยายามเปลี่ยน&สัญลักษณ์\&, '&', "&", ^&แต่ยังไม่ได้รับสามารถรับ URL เพื่อประเมินผลได้อย่างถูกต้อง จริงๆแล้วมันใช้'&'งานได้เมื่อฉันเรียกใช้คำสั่ง curl จาก Terminal.app แต่ล้มเหลวเมื่อฉันวางไว้ในสคริปต์ทุบตีห่อเป็นวงและเรียกใช้
Chernoff

คำตอบ:


125

การใส่ URL ทั้งหมดไว้ในเครื่องหมายคำพูดคู่จะช่วยแก้ปัญหาของคุณได้


9
อัญประกาศเดี่ยวอาจจะดีกว่าเว้นแต่ว่าไม่จำเป็นต้องแก้ไขตัวแปร
jpm

เมื่อฉันใช้เครื่องหมายคำพูดรอบ URL ทั้งหมดนิพจน์${i}จะไม่ส่งคืนค่า
Chernoff

2
ในกรณีของฉันอัญประกาศคู่ล้มเหลวในขณะที่คำพูดเดี่ยวใช้งานได้ดี
abeboparebop

3
โปรดใช้ความระมัดระวังว่าจะใช้โปรแกรมอะไรในการพิมพ์คำพูด ในขณะที่รีบแก้ไขเชลล์สคริปต์ฉันใช้โปรแกรมแก้ไขข้อความ ใส่เครื่องหมายคำพูดแบบเอียงแทนเครื่องหมายคำพูดคู่ตรง สิ่งนี้ทำให้สคริปต์ยุ่งเหยิงและทำให้ปัญหายากต่อการค้นหา!
David

41
curl "http://www.example.com?m=method&args=1"

คุณใช้เครื่องหมาย & เป็นตัวคั่นสำหรับ GET URL หรือไม่ หรืออยู่ในชิ้นส่วนของข้อมูล?

หากอยู่ในข้อมูลคุณต้องเข้ารหัสเป็นอักขระ HTML ถ้าไม่ใช่ให้ล้อมรอบด้วยเครื่องหมายคำพูด

การเข้ารหัสสำหรับ&ควร%26อยู่ใน URL

curl "http://www.example.com?m=this%26that

ฉันใช้&สัญลักษณ์นี้เป็นส่วนหนึ่งของข้อมูลเกือบจะเหมือนกับที่คุณแสดง ${i}จับคือแทนที่จะเป็นค่าตัวเลขที่ฉันใช้ ผมจึงต้องการhttp://www.example.com?m=method&args=${i}ประเมินเป็น URL
Chernoff

3
วิธีที่ฉันแสดง URL นั้นใช้เครื่องหมาย "&" เป็นตัวคั่นสำหรับตัวแปร GET ดังนั้นตอนนี้ฉันจึงสับสนใน $ [i] คุณมีข้อมูลที่มี "&" หรือไม่ หากเป็นเช่นนั้นคุณจะต้องเข้ารหัส URL & =% 26
Matt Clark

1
ค้นหาทั้งอินเทอร์เน็ตไม่พบวิธีแก้ปัญหา @MattClark คุณคือฮีโร่ ฉันแค่เข้ารหัส URL & ซึ่งเป็นส่วนหนึ่งของข้อมูลและสคริปต์ของฉันทำงานได้ดี
Haris ur Rehman

1
มีการขาดหายไป "ในตอนท้ายของข้อมูลโค้ดชุดที่สองหรือไม่
เดวิด

24

การใส่เครื่องหมายคำพูดเดี่ยวรอบ&สัญลักษณ์ดูเหมือนจะใช้ได้ผล นั่นคือการใช้ URL เช่นเดียวhttp://www.example.com/page.asp?arg1=${i}'&'arg2=${j}กับ curl จะส่งคืนหน้าเว็บที่ร้องขอ


2
คุณควรรวมข้อกำหนดการโต้แย้งไว้ในคำถามเพื่อให้ชัดเจนสำหรับมุมมองในอนาคต
Manatax

ทำไมคำตอบนี้ถึงได้รับการยอมรับ? ต้องตอบคำตอบนี้stackoverflow.com/a/13339492/2898694
Sharikov Vladislav

13

แทนที่จะลองใช้อักขระ Escape "&" คุณสามารถระบุพารามิเตอร์ http url ในคำขอ POST ด้วยพารามิเตอร์ -d ดังที่แสดงด้านล่าง:

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

หากคำขอเป็น GET คุณควรเพิ่มตัวเลือก -G ซึ่งบอกให้ curl ส่งข้อมูลด้วยคำขอ GET

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that

นี่คือคำตอบที่ดีที่สุด! ขอบคุณ!
Unbreak

สิ่งนี้ได้ผลสำหรับฉัน การเพิ่มเครื่องหมายคำพูดคู่ไม่ได้ผล
Juhog


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