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

时间:2010-06-09 15:26:16

标签: xml command-line curl

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

我应该使用什么命令?

9 个答案:

答案 0 :(得分:466)

如果该问题与您的其他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

阅读manpage。跟随-d参数的摘要。

  

-d / - data

     

(HTTP)在a中发送指定的数据   对HTTP服务器的POST请求   与浏览器执行时相同的方式   用户已填写HTML表单和   按下提交按钮。这将   导致curl将数据传递给   服务器使用内容类型   应用程序/ x-WWW窗体-urlencoded。   与-F / - 形式比较。

     

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

     

如果更多地使用这些选项中的任何一个   而不是一次在同一命令行,   指定的数据将是   与分离合并在一起   &安培;码元。因此,使用'-d name = daniel   -d skill = lousy'会生成一个看起来像的后块   '名称=丹尼尔&安培;技能=糟糕'。

     

如果您使用该字母开始数据   @,其余应该是文件名   从中读取数据,或者 - 如果需要   curl从stdin读取数据。该   文件的内容必须已经是   URL编码。多个文件也可以   被指定。从文件中发布数据   因此,命名为'foobar'将完成   --data @foobar。

答案 1 :(得分:177)

manpage开始,我相信这些是您正在寻找的机器人:

  

-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

答案 2 :(得分:44)

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

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

  

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

答案 3 :(得分:19)

使用Jenkins 1.494,我能够使用带有curl参数的--form将文件发送到Ubuntu Linux 12.10上的作业参数:

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

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

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

如果此调用成功,curl将返回0。如果不成功,则会将服务中的错误或异常打印到控制台。这个答案需要很多an old blog post relating to Hudson,我为了自己的需要而解构和重新工作。

答案 4 :(得分:6)

以下是在Windows上使用curl命令行在Windows上发布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"

答案 5 :(得分:3)

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

| or }

答案 6 :(得分:3)

您可以使用此命令:

(resp, status) => {
        spots[this.count].distanceFrom = (resp.rows[0].elements[0].distance.value / 1000).toFixed(1);
        if ((this.count + 1) < spots.length) {
          this.count++;
          this.setDistances(spots, callback);
        } else {
          this.count = 0;
          callback(spots);
        }
    });

答案 7 :(得分:0)

如果您在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

答案 8 :(得分:0)

Powershell + Curl + Zimbra SOAP API

${my_xml} = @"
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
  <soapenv:Body>
   <GetFolderRequest xmlns=\"urn:zimbraMail\">
    <folder>
       <path>Folder Name</path>
    </folder>
   </GetFolderRequest>
  </soapenv:Body>
</soapenv:Envelope>
"@

${my_curl} = "c:\curl.exe"
${cookie} = "c:\cookie.txt"

${zimbra_soap_url} = "https://zimbra:7071/service/admin/soap"
${curl_getfolder_args} = "-b", "${cookie}",
            "--header", "Content-Type: text/xml;charset=UTF-8",
            "--silent",
            "--data-raw", "${my_xml}",
            "--url", "${zimbra_soap_url}"

[xml]${my_response} = & ${my_curl} ${curl_getfolder_args}
${my_response}.Envelope.Body.GetFolderResponse.folder.id