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 "file=@x.py" 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, "file=@x.py"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 ?



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 "file@x.py"(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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.