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

Arn*_*pta 378 xml command-line curl

如何使用命令行中的curl 将xml文件发送/发布到本地服务器http:// localhost:8080

我应该使用什么命令?

Pet*_*tze 490

如果该问题与您的其他Hudson问题相关,请使用他们提供的命令.

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Run Code Online (Sandbox Code Playgroud)

您需要稍微更改它才能从文件中读取:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Run Code Online (Sandbox Code Playgroud)

阅读联机帮助页.跟随-d参数的摘要.

-d/ - 数据

(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器一样.这将导致curl使用content-type application/x-www-form-urlencoded将数据传递到服务器.与-F/ - 形式比较.

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

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

如果用字母@开始数据,其余的应该是一个文件名来读取数据,或者 - 如果你想让curl从stdin读取数据.该文件的内容必须已经过URL编码.也可以指定多个文件.因此,可以使用--data @foobar从名为'foobar'的文件中发布数据.

  • 只要你指定内容类型`--header"Content-Type:application/xml"`你不应该[URL-encode](http://en.wikipedia.org/wiki/Percent-encoding ) (50认同)
  • 我只想补充一点,如果你使用"-d"它默认为POST,所以也不需要使用"-X". (11认同)
  • 请注意,`-d`会从文件中删除换行符.要避免这种情况,请使用`--data-binary`代替. (11认同)
  • 如果你使用curl的关注重定向选项`-L`,请执行*not*use` -X POST`,因为它会使重定向的请求也使用POST.如果你只是使用-d作为@Tai建议,这不会发生 (4认同)
  • 阅读联机帮助页。“文件的内容必须已经被URL编码了。” OP的XML文件肯定不是。 (2认同)
  • 从curl 7.18.0开始,还有一个--data-urlencode &lt;data&gt;选项,它将为您进行URL编码 (2认同)

Pis*_*3.0 181

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

-F/--form <name=content>

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

例如,将密码文件发送到服务器,其中'password'是/ etc/passwd将作为输入的表单字段的名称:

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

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

  • 如果要管理文件,格式`file = @ - `会很有用. (12认同)
  • 此解决方案的另一个好处是能够命名正在发送的文件(与上面选择的解决方案不同),因此您可以例如发送多个文件. (11认同)
  • 如果有人希望发送文件和其他信息:根据需要多次使用 -F key=val -F key=val。将所有 post 参数包含在一个由 &amp; 分隔的大字符串中不起作用。 (2认同)

Nga*_*Duy 46

您可以使用选项--data with file.

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

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


Ste*_*HHH 20

随着詹金斯1.494,我能够将文件发送到使用在Ubuntu Linux 12.10的作业参数curl--form参数:

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

第三行激活表单的Build按钮.第四行是带有"/ build"后缀的作业URL.

如果此调用成功,则curl返回0.如果不成功,则会将服务中的错误或异常打印到控制台.这个答案需要很多关于哈德森的老博文,我根据自己的需要对其进行了解构和重新设计.


小智 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"
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以使用这个命令:

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 
Run Code Online (Sandbox Code Playgroud)