ฉันได้ลองทำสิ่งต่อไปนี้เพื่อส่งตัวแบ่งบรรทัดด้วย curl แต่ curl \n
ไม่ตีความ
curl -X PUT -d "my message\n" http://localhost:8000/hello
ฉันจะส่งตัวแบ่งบรรทัดด้วย curl ได้อย่างไร?
ฉันได้ลองทำสิ่งต่อไปนี้เพื่อส่งตัวแบ่งบรรทัดด้วย curl แต่ curl \n
ไม่ตีความ
curl -X PUT -d "my message\n" http://localhost:8000/hello
ฉันจะส่งตัวแบ่งบรรทัดด้วย curl ได้อย่างไร?
คำตอบ:
บางครั้งคุณต้องการให้ข้อมูลที่จะส่งแบบคำต่อคำ
--data-binary
ตัวเลือกไม่ว่า
-d @message.txt
ตามที่แนะนำในคำตอบอื่นโดยเฉพาะสามารถเปลี่ยนการแบ่งบรรทัดของคุณได้ --data-binary
ในทางกลับกันจะไม่ (ซึ่งเป็นสิ่งสำคัญหากคุณต้องการให้เส้นแบ่ง CRLF ของคุณสำหรับหลายส่วน / แบบฟอร์มข้อมูลโปรดดู: stackoverflow.com/questions/10765243/… )
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
เปลือกของคุณจะผ่าน\
ตามด้วยมากกว่าการขึ้นบรรทัดใหม่จะขดมากกว่าn
"my message\n"
ทุบตีมีการสนับสนุนสตริงไวยากรณ์ที่สนับสนุนลำดับหนีเหมือนอีกและ\n
\t
ในการใช้งานให้เริ่มต้นสตริงด้วย$'
และลงท้ายด้วย'
:
curl -X PUT -d $'my message\n' http://localhost:8000/hello
my message\n
คำต่อคำไม่ใช่การหนีสองครั้งอย่างที่คุณพูด
my message\n
"my message\n"
\n
ไม่มีส่วนเกี่ยวข้องกับ JavaScript ในความเป็นจริงไม่มีอะไรเกี่ยวข้องกับ JavaScript เลย
มีวิธีที่ง่ายกว่ามาก!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
สิ่งนี้จะใช้การอ้างอิง ANSI-Cเพื่อแทรกอักขระขึ้นบรรทัดใหม่
วิธีแก้ปัญหาสำหรับผู้ที่ไม่ต้องการใช้ไฟล์และไม่ต้องการหันไปใช้เวทมนตร์ที่หลบหนีคือ:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
แต่นี่เป็นบรรทัดใหม่ตามตัวอักษรในส่วนข้อมูลโพสต์ไม่ใช่ในฟิลด์ฟอร์ม
@
คือการระบุชื่อไฟล์ แต่มีความหมายพิเศษเมื่อใช้@-
หรือไม่? กำลัง<<EOF
ทำอะไรอยู่?
@-
บอกให้ curl ใช้อินพุตจาก standard in และ<<EOF
เป็นจุดสิ้นสุดของตัวบ่งชี้สตรีมสำหรับ bash จากนั้นเราใช้คำวิเศษEOF
ในส่วนข้อมูลเพื่อบอก bash ว่าเราเขียนไปยังสตรีมเสร็จแล้ว
-
จัดเรียงวิธีมาตรฐานใน GNU / Linux เพื่อระบุ STDIN เมื่อคาดว่าชื่อไฟล์ มันไม่เป็นสากล แต่เป็นเรื่องธรรมดา
มีปัญหาที่คล้ายกัน ขณะอัปโหลดไฟล์ CSV จาก Mac ไปยังที่เก็บข้อมูลบนคลาวด์บรรทัดใหม่จะถูกลบออก หลังจากดาวน์โหลดไฟล์ทั้งหมดจะดูเหมือนเป็นบรรทัดเดียว ฉันพยายามเพิ่มอักขระ EOL ที่แตกต่างกัน แต่\n
\r
\r\n
ไม่ประสบความสำเร็จ ใช้--data-binary
แทนการ-d
แก้ไขปัญหา
Btw ปัญหานี้เกิดขึ้นจาก Mac เท่านั้น -d
ทำงานได้ดีในขณะที่โทรจากเครื่อง CentOS สิ่งนี้ดูเหมือนมากเนื่องจากตัวละครใหม่ของ Mac แต่อย่ารู้สึกอยากแก้ไขข้อบกพร่องอีกต่อไป
ขอบคุณมาก ๆ สำหรับความช่วยเหลือของคุณ.
curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"
เทียบกับ
curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
--data-binary @
ได้แก้ไขปัญหาของฉันแล้ว (ส่งไฟล์. ics หลายสายไปยังเซิร์ฟเวอร์ CalDAV)
(ฉันลงเอยด้วยคำถามที่แตกต่างกันเล็กน้อยดังนั้นฉันจะโพสต์คำตอบของฉันเพราะอาจช่วยนักสำรวจในอนาคตได้)
วิธีแก้ปัญหาของฉันใช้กับผู้ที่กำลังส่งข้อมูลรูปแบบเช่นคู่คีย์ / ค่าในสตริงแบบสอบถาม ใช้เส้นแบ่งเข้ารหัสซึ่งเป็นเช่นเดียวกับวิธีการที่พื้นที่เข้ารหัสเป็น%0A
%20
คุณสามารถใช้http://meyerweb.com/eric/tools/dencoder/เพื่อแปลงสัญลักษณ์อื่น ๆ
ดังนั้นหากคุณต้องการตั้งค่าคีย์message
เป็นค่า:
line one
another
คุณจะส่ง
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
ไม่ใช่คำตอบสำหรับคำถามของคุณ แต่ฉันจะแก้ไขปัญหานี้ด้วยการสร้างไฟล์ชั่วคราวที่มีข้อความและตัวแบ่งบรรทัดและให้ curl ไฟล์นั้นทำงานได้:
curl -X PUT -d @message.txt http://localhost:8000/hello
จากคู่มือ :
หากคุณเริ่มต้นข้อมูลด้วยตัวอักษร @ ส่วนที่เหลือควรเป็นชื่อไฟล์เพื่ออ่านข้อมูลหรือ - หากคุณต้องการให้ curl อ่านข้อมูลจาก stdin เนื้อหาของไฟล์ต้องเข้ารหัส URL อยู่แล้ว สามารถระบุไฟล์ได้หลายไฟล์ การโพสต์ข้อมูลจากไฟล์ชื่อ 'foobar' จะทำได้ด้วย --data @foobar
--data-binary
เป็นทางเลือกที่ซื่อสัตย์-d
กว่าเนื่องจากจะส่งข้อมูลแบบคำต่อคำ
-d @/path/to/temp/file.txt
ไม่ช่วยแก้ปัญหาการแบ่งบรรทัด --data-binary
ดูด้านบน
วิธีที่ง่ายมากเพียงแค่ Shift-Enter ในคอนโซลสำหรับช่วงพัก อ่านได้มากพิมพ์ด้วย
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
ทำสิ่งนี้เพื่อลบเส้นแบ่ง:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
ฉันใช้ Sendgrid กับรหัสนี้ (คัดลอกด้านล่าง) พบที่นี่https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\n
ทำงานใน Gmail แต่\n
ถูกเพิกเฉย ฉันพยายามเพิ่มการหลบหนีและคำแนะนำอื่น ๆ เป็นสองเท่า ฉันลอง\r\n
แล้วและก็ใช้ไม่ได้ใน Gmail เช่นกัน หมายเหตุ: ฉันไม่ได้กังวลที่จะทดสอบโปรแกรมรับส่งเมลอื่น ๆ เพราะอาจเป็นปัญหาเฉพาะของ Gmail
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
ในที่สุดฉันก็ล้มเลิกการมองหาวิธีแก้ปัญหาและเปลี่ยนtext/plain
ไปtext/html
ใช้<br />
แท็กที่เพิ่งใช้
มีคนแนะนำว่า Sendgrid แปลงข้อความธรรมดาเป็น HTML หากคุณเปิดใช้งานพิกเซลการติดตามซึ่งก็สมเหตุสมผลดี บางทีบรรทัดใหม่อาจถูกทำลายในกระบวนการแปลงข้อความธรรมดาเป็น html ฉันถือว่าลูกค้าต้องการพิกเซลการติดตามดังนั้นจึงตัดสินใจเปลี่ยนไปใช้ HTML