POSTANDO o conteúdo de um arquivo com CURL


15

(O histórico a seguir é histórico, você pode pular para "Pergunta:" se desejar)

Há uma página da web para um dos meus cursos que aceita texto de entrada (que deve ser o código Python) e, em seguida, fornece uma resposta tokenizada. Ele deve ser usado como referência para os lexers Python que estamos escrevendo. Estou tentando automatizar meu processo de teste e poder verificar meu código sem abrir um navegador, copiar texto e para trás, etc. Então, eis o que estou tentando fazer:

Eu tenho um exemplo de arquivo python chamado "x.py" e quero publicá-lo no servidor como se eu tivesse preenchido esse formulário. Eu tentei:

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

Mas, infelizmente, isso não está funcionando direito, porque aparentemente "@x.py"está sendo publicado como o conteúdo do meu arquivo (ou seja, "file=@x.py"é o que está sendo publicado, não "file=<contents-of-x.py>"). Eu tentei --forme --datamas esses também não funcionaram.

Pergunta: Especificamente, se eu tiver um arquivo com conteúdo não codificado em url, e o conteúdo desse arquivo precisar fazer parte de um POST e associado a um nome específico (neste caso file), qual é a maneira correta de fazer isso ?



Por que não postar isso como resposta? Você pode responder sua própria pergunta e, em ~ 2 dias ou algo (não sei quanto tempo), você pode aceitá-la.
usar o seguinte código

@ BenjiWiebe: Tudo bem, eu vou postar.
Cornstalks

Respostas:


25

O que você quer é "file@x.py"(não =).

Na página de curl manual :

name @ filename Isso fará com que os dados de carregamento de onda do arquivo fornecido (incluindo qualquer nova linha), codifique esses dados por URL e os repasse no POST. A parte do nome recebe um sinal de igual anexado, resultando em name = urlencoded-file-content. Observe que o nome já deve estar codificado em URL.


2

Deixarei a resposta do qmega como a aceita, mas colocarei uma resposta que deixei em um comentário aqui também para facilitar a leitura. Uma outra maneira de fazer isso é simplesmente especificando "file=`cat x.py`". Para o comando completo, seria:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.