POST zawartości pliku za pomocą CURL

15

(Oto historia, możesz przejść do „Pytanie:”, jeśli chcesz)

Jest strona dla jednego z moich kursów, która akceptuje tekst wejściowy (prawdopodobnie kodem Python), a następnie daje tokenizowaną odpowiedź. Ma to służyć jako odniesienie do pisanych przez nas leksyków Python. Próbuję zautomatyzować proces testowania i móc sprawdzić kod bez otwierania przeglądarki, kopiowania tekstu tam iz powrotem itp. Więc oto, co próbuję zrobić:

Mam przykładowy plik python o nazwie „x.py” i chcę go wysłać na serwer, tak jakbym wypełnił ten formularz. Próbowałem:

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

Ale niestety to nie działa poprawnie, ponieważ najwyraźniej "@x.py"jest publikowany jako zawartość mojego pliku (to znaczy to, "[email protected]"co jest publikowane, a nie "file=<contents-of-x.py>"). Próbowałem --formi --datatylko tych, którzy nie pracowali albo.

Pytanie: W szczególności, jeśli mam plik z zawartością niekodowaną w adresie URL, a zawartość tego pliku musi być częścią POST i powiązana z określoną nazwą (w tym przypadku file), jaki jest właściwy sposób osiągnięcia tego celu ?

Łodygi kukurydzy
źródło
Dlaczego nie opublikować tego jako odpowiedzi? Możesz odpowiedzieć na własne pytanie, a następnie w ciągu ~ 2 dni lub czegoś (nie jestem pewien, jak długo) możesz je zaakceptować.
BenjiWiebe
@BenjiWiebe: Dobra, opublikuję to.
Cornstalks

Odpowiedzi:

25

To czego chcesz to "[email protected]"(nie =).

Z strony curl podręcznika :

nazwa @ nazwa pliku Spowoduje to załadowanie danych curl z podanego pliku (w tym wszelkich nowych wierszy), kodowanie tych danych w adresie URL i przekazywanie ich w POST. Do części nazwy dołączany jest znak równości, co powoduje, że nazwa = urlencoded-file-content. Pamiętaj, że nazwa ma być już zakodowana w adresie URL.

qmega
źródło
2

Pozostawię odpowiedź qmega jako zaakceptowaną, ale w komentarzu zostawię też odpowiedź, aby ułatwić czytanie. Innym sposobem na to jest po prostu poprzez określenie "file=`cat x.py`". Dla pełnego polecenia byłoby to:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
Łodygi kukurydzy
źródło