โพสต์เนื้อหาของไฟล์ด้วย CURL


15

(ต่อไปนี้คือ backstory คุณสามารถข้ามไปที่ "คำถาม:" หากคุณต้องการ)

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

ฉันมีไฟล์ไพ ธ อนตัวอย่างชื่อ "x.py" และฉันต้องการโพสต์ไปยังเซิร์ฟเวอร์ราวกับว่าฉันกรอกแบบฟอร์มนั้นแล้ว ฉันได้พยายาม:

curl --data-urlencode "file=@x.py" http://matt.might.net/apps/pylex/pylex.php

แต่น่าเสียดายที่มันใช้งานไม่ได้เพราะเห็นได้ชัดว่า"@x.py"กำลังโพสต์เป็นเนื้อหาไฟล์ของฉัน (นั่น"file=@x.py"คือสิ่งที่โพสต์ไม่ใช่"file=<contents-of-x.py>") ฉันพยายาม--formแล้ว--dataแต่ก็ไม่ได้ผลเหมือนกัน

คำถาม: โดยเฉพาะถ้าฉันมีไฟล์ที่มีเนื้อหาที่ไม่ได้เข้ารหัส URL และเนื้อหาของไฟล์นี้ต้องเป็นส่วนหนึ่งของ POST และเชื่อมโยงกับชื่อเฉพาะ (ในกรณีนี้file) วิธีที่ถูกต้องในการทำสิ่งนี้ให้สำเร็จคืออะไร ?



ทำไมไม่โพสต์ที่เป็นคำตอบ? คุณสามารถตอบคำถามของคุณเองและจากนั้นใน ~ 2 วันหรือบางสิ่ง (ไม่แน่ใจว่านานแค่ไหน) คุณสามารถยอมรับได้
BenjiWiebe

@BenjiWiebe: เอาล่ะฉันจะโพสต์
Cornstalks

คำตอบ:


25

สิ่งที่คุณต้องการคือ"file@x.py"(ไม่=)

จากcurl manpage :

name @ filenameสิ่งนี้จะทำให้ curl load data จากไฟล์ที่กำหนด (รวมถึง newlines ใด ๆ ), URL-encode ข้อมูลนั้นและส่งต่อใน POST ส่วนชื่อได้รับเครื่องหมายเท่ากับต่อท้ายผลลัพธ์ในชื่อ = urlencoded-file-content โปรดทราบว่าชื่อนี้คาดว่าจะเข้ารหัส URL แล้ว


2

ฉันจะทิ้งคำตอบของ qmega เป็นที่ยอมรับ แต่ฉันจะใส่คำตอบที่ฉันทิ้งไว้ในความคิดเห็นที่นี่เช่นกันสำหรับการอ่านง่ายขึ้น อีกวิธีหนึ่งที่จะทำคือเพียงโดย "file=`cat x.py`"specifyping สำหรับคำสั่งแบบเต็มมันจะเป็น:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.