Como posso enviar / publicar um arquivo xml em um servidor local http: // localhost: 8080 usando curl na linha de comando?
Que comando devo usar?
Como posso enviar / publicar um arquivo xml em um servidor local http: // localhost: 8080 usando curl na linha de comando?
Que comando devo usar?
Respostas:
Se essa pergunta estiver conectada às outras perguntas do Hudson, use o comando que elas fornecem. Dessa forma, com o XML na linha de comando:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Você precisa alterá-lo um pouco para ler um arquivo:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Leia a página de manual . seguindo um resumo para -d Parameter.
-d / - dados
(HTTP) Envia os dados especificados em uma solicitação POST para o servidor HTTP, da mesma forma que um navegador quando um usuário preencheu um formulário HTML e pressiona o botão Enviar. Isso fará com que o curl transmita os dados para o servidor usando o aplicativo do tipo de conteúdo / x-www-form-urlencoded. Compare com o formulário -F / -.
-d / - dados são os mesmos que --data-ascii. Para postar dados puramente binários, você deve usar a opção --data-binary. Para codificar por URL o valor de um campo de formulário, você pode usar --data-urlencode.
Se qualquer uma dessas opções for usada mais de uma vez na mesma linha de comando, as partes de dados especificadas serão mescladas com um símbolo & de separação. Portanto, o uso de '-d name = daniel -d skill = péssimo' geraria um pedaço de postagem semelhante a 'name = daniel & skill = péssimo'.
Se você iniciar os dados com a letra @, o restante deverá ser um nome de arquivo para o qual ler os dados ou - se desejar que o curl leia os dados do stdin. O conteúdo do arquivo já deve estar codificado em URL. Vários arquivos também podem ser especificados. A publicação de dados de um arquivo chamado 'foobar' seria feita com --data @foobar.
--header "Content-Type:application/xml"
que não são esperados para URL-codificar
-L
, não use, -X POST
pois ele fará com que a solicitação redirecionada use POST também. Se você usar apenas -d como @Tai sugere, isso não vai acontecer
-d
retira as quebras de linha dos arquivos. Para evitar isso, use em seu --data-binary
lugar.
Na página de manual , acredito que estes são os dróides que você está procurando:
-F/--form <name=content>
(HTTP) Isso permite ondular emular um formulário preenchido no qual um usuário pressionou o botão enviar. Isso causa ondulação nos dados do POST usando o multipart do tipo de conteúdo / dados do formulário de acordo com a RFC2388. Isso permite o upload de arquivos binários, etc. Para forçar a parte 'content' a ser um arquivo, prefixe o nome do arquivo com um sinal @.
Exemplo, para enviar seu arquivo de senha para o servidor, em que 'senha' é o nome do campo de formulário no qual / etc / passwd será a entrada:
curl -F password=@/etc/passwd www.mypasswords.com
Então, no seu caso, isso seria algo como
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
é útil se você quiser tubo de seu arquivo no.
Você pode usar a opção --data com o arquivo
Grave o conteúdo xml em um arquivo chamado soap_get.xml e use o comando curl para enviar a solicitação:
curl -X POST --header "Tipo de conteúdo: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
Com o Jenkins 1.494, consegui enviar um arquivo para um parâmetro de trabalho no Ubuntu Linux 12.10 usando curl
com os --form
parâmetros:
curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
-Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
-Fsubmit=Build \
http://user:password@jenkinsserver/job/jobname/build
No servidor Jenkins, configurei um trabalho que aceita um único parâmetro: um parâmetro de upload de arquivo chamado myfileparam
.
A primeira linha dessa chamada curl constrói um formulário da Web com um parâmetro chamado myfileparam
(o mesmo que no trabalho); seu valor será o conteúdo de um arquivo no sistema de arquivos local chamado /local/path/to/your/file.txt
. O @
prefixo do símbolo diz ao curl para enviar um arquivo local em vez do nome do arquivo especificado.
A segunda linha define uma solicitação JSON que corresponde aos parâmetros do formulário na linha um: um parâmetro de arquivo nomeado myfileparam
.
A terceira linha ativa o botão Compilar do formulário. A quarta linha é a URL do trabalho com o sufixo "/ build".
Se esta chamada for bem-sucedida, a curvatura retornará 0
. Se não der certo, o erro ou exceção do serviço é impresso no console. Essa resposta leva muito de um post antigo relacionado ao Hudson , que eu desconstruí e retrabalhei para minhas próprias necessidades.
Veja como você pode POST XML no Windows usando a linha de comando curl no Windows. Melhor usar o arquivo batch / .cmd para isso:
curl -i -X POST -H "Content-Type: text/xml" -d ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^> ^
^<Transaction^> ^
^<SomeParam1^>Some-Param-01^</SomeParam1^> ^
^<Password^>SomePassW0rd^</Password^> ^
^<Transaction_Type^>00^</Transaction_Type^> ^
^<CardHoldersName^>John Smith^</CardHoldersName^> ^
^<DollarAmount^>9.97^</DollarAmount^> ^
^<Card_Number^>4111111111111111^</Card_Number^> ^
^<Expiry_Date^>1118^</Expiry_Date^> ^
^<VerificationStr2^>123^</VerificationStr2^> ^
^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^> ^
^<Reference_No^>Some Reference Text^</Reference_No^> ^
^<Client_Email^>john@smith.com^</Client_Email^> ^
^<Client_IP^>123.4.56.7^</Client_IP^> ^
^<Tax1Amount^>^</Tax1Amount^> ^
^<Tax2Amount^>^</Tax2Amount^> ^
^</Transaction^> ^
" "http://localhost:8080"
Você pode usar este comando:
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json" 'API_SERVER_URL' -k
Se você estiver usando curl no Windows:
curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
The contents of the file must already be URL-encoded.
Os arquivos XML do OP certamente não são.