如何从命令行使用 cURL 将 XML 文件发布到本地服务器 http://localhost:8080
?
我应该使用什么命令?
如果该问题与您的其他 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) 在 POST 请求中将指定的数据发送到 HTTP 服务器,就像浏览器在用户填写 HTML 表单并按下提交按钮时所做的一样。这将导致 curl 使用内容类型 application/x-www-form-urlencoded 将数据传递给服务器。与 -F/--form 进行比较。 -d/--data 与--data-ascii 相同。要发布纯二进制数据,您应该改用 --data-binary 选项。要对表单字段的值进行 URL 编码,您可以使用 --data-urlencode。如果在同一命令行上多次使用这些选项中的任何一个,则指定的数据片段将使用分隔符号 &-symbol 合并在一起。因此,使用'-d name=daniel -d Skill=lousy'会生成一个看起来像'name=daniel&skill=lousy'的帖子块。如果您以字母 @ 开始数据,则其余部分应该是从中读取数据的文件名,或者 - 如果您希望 curl 从标准输入中读取数据。文件的内容必须已经是 URL 编码的。也可以指定多个文件。因此,将使用 --data @foobar 从名为“foobar”的文件发布数据。
在 manpage 中,我相信这些是您正在寻找的机器人:
-F/--form
因此,在您的情况下,这将类似于
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
格式会很有帮助。
您可以将选项 --data 与文件一起使用。
将 xml 内容写入名为 soap_get.xml 的文件并使用 curl 命令发送请求:
curl -X POST --header "Content-Type:text/xml;charset=UTF-8" --data @soap_get.xml your_url
使用 Jenkins 1.494,我能够使用带有 --form
参数的 curl
将文件发送到 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 中得到了很多,我根据自己的需要对其进行了解构和重新设计。
这是在 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"
你可以使用这个命令:
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
如果您有多个标题,那么您可能需要使用以下内容:
curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url
如果您在 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
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
The contents of the file must already be URL-encoded.
OP 的 XML 文件肯定不是。--header "Content-Type:application/xml"
,您就不会URL-encode-L
,请不使用-X POST
,因为它会使重定向请求也使用 POST。如果您只是按照@Tai 的建议使用 -d ,则不会发生这种情况-d
会从文件中删除换行符。为避免这种情况,请改用--data-binary
。