使用curl命令行发送/发布xml文件


Answers:


505

如果该问题与您的其他Hudson问题有关,请使用它们提供的命令。从命令行使用XML的这种方式:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

您需要对其进行一些更改以从文件中读取:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

阅读联机帮助页。遵循-d参数的抽象。

-d /-数据

(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像浏览器在用户填写HTML表单并按下Submit按钮时所做的一样。这将导致curl使用内容类型application / x-www-form-urlencoded将数据传递到服务器。比较-F /-形式。

-d /-data与--data-ascii相同。要发布纯二进制数据,应改用--data-binary选项。要对表单字段的值进行URL编码,可以使用--data-urlencode。

如果在同一命令行上多次使用了这些选项中的任何一个,则指定的数据段将与一个分隔的&符号合并在一起。因此,使用'-d name = daniel -d skill = lousy'将生成一个看起来像'name = daniel&skill = lousy'的帖子块。

如果以字母@开头的数据,则其余的应该是从中读取数据的文件名,或者-如果希望curl从stdin中读取数据。文件的内容必须已经被URL编码。也可以指定多个文件。因此,将使用--data @foobar从名为“ foobar”的文件中发布数据。


2
阅读手册。The contents of the file must already be URL-encoded.OP的XML文件肯定不是。
Panic Panic

52
只要您指定的内容类型--header "Content-Type:application/xml",你预计不会URL编码
上校恐慌

12
我要补充一点,如果您使用“ -d”,则默认为POST,因此也无需使用“ -X”。
塔尔·利隆

4
如果您使用curl的跟随重定向选项-L,请不要使用-X POST它,因为重定向请求也将使用POST。如果您按照@Tai的建议使用-d,则不会发生
Tristan Havelick 2014年

18
警告,-d从文件中删除换行符。为避免这种情况,请--data-binary改用。
2015年

189

联机帮助页,我相信这些是您正在寻找的机器人:

-F/--form <name=content>

(HTTP)这可以使curl模仿用户按下提交按钮时所填写的表单。这将导致卷曲,以使用根据RFC2388的Content-Type multipart / form-data的POST数据。这样就可以上传二进制文件等。要强制“内容”部分为文件,请在文件名前添加@符号。

例如,要将密码文件发送到服务器,其中“ password”是将输入/ etc / passwd的表单域的名称:

curl -F password=@/etc/passwd www.mypasswords.com

所以在你的情况下,这就像
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
该解决方案的另一个好处是能够命名要发送的文件(与上面选择的解决方案不同),因此您可以例如发送多个文件。
大卫·凯恩斯

13
格式file=@-,如果你想管你的文件中是有帮助的。
史蒂芬路

2
如果有人要发送文件和其他信息,请按照需要使用-F key = val -F key = val。将所有发布参数括在用&分隔的大字符串中不起作用。
hgolov 2014年

您能提到如何准备接收网页以接收通过curl从桌面上传的文件吗?
SexyBeast 2015年

@Cupidvogel:和其他文件上传字段一样;没有专门针对卷曲的特殊处理。
Piskvor在2015年

47

您可以在文件中使用--data选项。

将xml内容写入名为soap_get.xml的文件,并使用curl命令发送请求:

curl -X POST --header“ Content-Type:text / xml; charset = UTF-8” --data @ soap_get.xml your_url


这应该是答案,因为OP要求发布的文件不是内联文本。
FearlessFuture

这对于使用spring Web服务器为我显示“无法逃脱”是必要的,谢谢!
rogerdpack

20

使用Jenkins 1.494,我能够使用curlwith --form参数将文件发送到Ubuntu Linux 12.10上的job 参数:

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

在Jenkins服务器上,我配置了一个接受单个参数的作业:名为的文件上传参数myfileparam

该curl调用的第一行构造了一个Web表单,其参数名为myfileparam(与作业中相同)。其值将是名为的本地文件系统上文件的内容/local/path/to/your/file.txt。该@符号前缀告诉curl发送的,而不是给定文件名的本地文件。

第二行定义了与第一行的表单参数相匹配的JSON请求:名为的文件参数myfileparam

第三行激活表单的“生成”按钮。第四行是带有“ / build”后缀的作业URL。

如果此调用成功,则curl返回0。如果未成功,则将服务中的错误或异常打印到控制台。这个答案来自有关Hudson的旧博客文章,该文章很多,我根据我的需要对其进行了解构和重新设计。


6

这是在Windows上使用curl命令行在Windows上发布POST XML的方法。为此,最好使用batch / .cmd文件:

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"

在使用curl命令之前,您如何格式化xml字符串
Chinmoy

3

如果您有多个标题,则可能需要使用以下内容:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url

3

您可以使用以下命令:

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 

1

如果您在Windows 上使用curl

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.