POSTARE il contenuto di un file con CURL


15

(Di seguito è riportato il passato, puoi passare a "Domanda:" se lo desideri)

C'è una pagina web per uno dei miei corsi che accetta il testo di input (che dovrebbe essere il codice Python) e quindi fornisce una risposta tokenizzata. È pensato per essere usato come riferimento per i lexer Python che stiamo scrivendo. Sto cercando di automatizzare il mio processo di test ed essere in grado di controllare il mio codice senza aprire un browser, copiare il testo avanti e indietro, ecc. Quindi ecco cosa sto cercando di fare:

Ho un file Python di esempio chiamato "x.py" e voglio pubblicarlo sul server come se avessi compilato quel modulo. Ho provato:

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

Ma sfortunatamente, non funziona bene perché apparentemente "@x.py"viene pubblicato come contenuto del mio file (ovvero, "file=@x.py"è ciò che viene pubblicato, non "file=<contents-of-x.py>"). Ci ho provato --forme anche --dataquelli non hanno funzionato.

Domanda: In particolare, se ho un file con contenuti non codificati in url e il contenuto di questo file deve essere parte di un POST e associato a un nome particolare (in questo caso file), qual è il modo corretto di ottenere questo risultato ?



Perché non pubblicarlo come risposta? Puoi rispondere alla tua domanda e poi in ~ 2 giorni o qualcosa del genere (non so per quanto tempo) puoi accettarla.
BenjiWiebe,

@BenjiWiebe: Va bene, lo posterò.
Cornstalks,

Risposte:


25

Quello che vuoi è "file@x.py"(no =).

Dalla curl manpage :

name @ nomefile Questo farà arricciare i dati di caricamento dal file dato (compresi eventuali newline), codificare l'URL e trasferirli nel POST. La parte del nome ottiene un segno di uguale aggiunto, risultante in name = urlencoded-file-content. Si noti che il nome dovrebbe essere già codificato nell'URL.


2

Lascerò la risposta di qmega come accettata, ma inserirò una risposta che ho lasciato anche qui in un commento per una lettura più semplice. Un altro modo per farlo è semplicemente specificando "file=`cat x.py`". Per il comando completo, sarebbe:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.