簡體   English   中英

使用 cURL 命令行 POST XML 文件

[英]POST XML file using cURL command line

如何從命令行使用 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

閱讀聯機幫助頁 遵循 -d 參數的摘要。

-d/--數據

(HTTP) 將 POST 請求中的指定數據發送到 HTTP 服務器,就像瀏覽器在用戶填寫 HTML 表單並按下提交按鈕時所做的那樣。 這將導致 curl 使用內容類型 application/x-www-form-urlencoded 將數據傳遞到服務器。 與 -F/--form 比較。

-d/--data 與 --data-ascii 相同。 要發布純二進制數據,您應該改用 --data-binary 選項。 要對表單字段的值進行 URL 編碼,您可以使用 --data-urlencode。

如果在同一命令行上多次使用這些選項中的任何一個,則指定的數據片段將使用分隔符 & 符號合並在一起。 因此,使用“-d name=daniel -d Skill=lousy”會生成一個看起來像“name=daniel&skill=lousy”的帖子塊。

如果您以字母@ 開頭數據,則其余部分應該是從中讀取數據的文件名,或者 - 如果您希望 curl 從 stdin 讀取數據。 文件的內容必須已經是 URL 編碼的。 也可以指定多個文件。 因此,從名為“foobar”的文件中發布數據將使用 --data @foobar 完成。

聯機幫助頁,我相信這些是您正在尋找的機器人:

-F/--form <name=content>

(HTTP) 這讓 curl 模擬用戶按下提交按鈕的填寫表單。 這會導致 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

您可以將選項 --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,我能夠使用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”后綴的作業 URL。

如果此調用成功, curl 返回0 如果不成功,來自服務的錯誤或異常將打印到控制台。 這個答案從一篇與 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM