POSTING konten file dengan CURL

15

(Berikut ini adalah cerita latar, Anda dapat melompat ke "Pertanyaan:" jika Anda mau)

Ada halaman web untuk salah satu program saya yang menerima input teks (diharapkan menjadi kode Python) dan kemudian memberikan beberapa respons tokenized. Ini dimaksudkan untuk digunakan sebagai referensi untuk Python lexers yang sedang kami tulis. Saya mencoba mengotomatiskan proses pengujian saya dan dapat memeriksa kode saya tanpa membuka browser, menyalin teks bolak-balik, dll. Jadi inilah yang saya coba lakukan:

Saya punya contoh file python bernama "x.py" dan saya ingin mempostingnya ke server seolah-olah saya telah mengisi formulir itu. Saya sudah mencoba:

curl --data-urlencode "[email protected]" http://matt.might.net/apps/pylex/pylex.php

Tapi sayangnya, itu tidak berfungsi dengan baik karena tampaknya "@x.py"semakin diposting sebagai isi file saya (yaitu, "[email protected]"apa yang diposting, bukan "file=<contents-of-x.py>"). Saya sudah mencoba --formdan --datatetapi itu tidak berhasil.

Pertanyaan: Khususnya, jika saya memiliki file dengan konten yang tidak disandikan-url, dan konten file ini harus menjadi bagian dari POST dan dikaitkan dengan nama tertentu (dalam hal ini, file), apa cara yang benar untuk mencapai ini ?

Batang jagung
sumber
Hanya menemukan satu cara untuk melakukannya: "file=`cat x.py`"
Cornstalks
Mengapa tidak memposting itu sebagai jawaban? Anda dapat menjawab pertanyaan Anda sendiri, dan kemudian dalam ~ 2 hari atau sesuatu (tidak yakin berapa lama) Anda dapat menerimanya.
BenjiWiebe
@ BenjiWiebe: Baiklah, saya akan mempostingnya.
Cornstalks

Jawaban:

25

Yang Anda inginkan adalah "[email protected]"(tidak =).

Dari halaman curl manual :

name @ filename Ini akan membuat curl memuat data dari file yang diberikan (termasuk baris baru), URL-encode data itu dan meneruskannya di POST. Bagian nama mendapat tanda sama ditambahkan, menghasilkan nama = urlencoded-file-content. Perhatikan bahwa nama tersebut diharapkan sudah disandikan URL.

qmega
sumber
2

Saya akan meninggalkan jawaban qmega sebagai jawaban yang diterima, tetapi saya akan memberikan jawaban yang saya tinggalkan di komentar di sini juga untuk memudahkan membaca. Satu cara lain untuk melakukan ini adalah dengan menentukan "file=`cat x.py`". Untuk perintah penuh, itu akan menjadi:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
Batang jagung
sumber