2012-11-24 212 views
3

我已經安裝了windows的cURL命令行。windows cURL cmd和多行

現在我想使用這個cURL的REST api(redmine)。

我想創建的最基本的腳本是推新的「過去」。 但問題是,一個過去可以包含多行文本。

要換上新的過去,我用:

curl -k -s -H "X-Redmine-API-Key: %API_KEY%" --data-urlencode "paste[text]=%TEXT%" %URL% 

但問題是,當%TEXT%是由多行組成,窗戶CMD失敗。

例:

curl -k -s -H "X-Redmine-API-Key: XXXXXX" --data-urlencode "paste[text]=ST_METHOD_POST', 'POST', true); 
define('HTTP_REQUEST_METHOD_PUT',  'PUT',  true); 
define('HTTP_REQUEST_METHOD_DELETE', 'DELETE', true);" "https://etc" 

和CMD的第一個換行符後停止......

我試圖解析文本通過在該行的末尾添加^運行CMD前模擬多取勝CMD但確實不行......


更新1:

我嘗試

curl -k -s -H "X-Redmine-API-Key: %API_KEY%" --data-urlencode "paste[text]@tmp.txt" %URL% 

其中tmp.txt等於

hello world 

,但該請求轉化爲

{"paste":{"id":xxx,"author_id":xxx,"project_id":xxx,"title":"Paste #xxx","text":"  
■h\u0000e\u0000l\u0000l\u0000o\u0000 \u0000w\u0000o\u0000r\u0000l\u0000d\u0000", 
"created_on":"2012-11-26T09:24:15Z","updated_on":"2012-11-26T09:24:15Z"}} 

而最終的結果不起作用

+0

你好,你可以幫我這個:HTTP://計算器。 com/questions/26719068/how-can-i-run-this-curl-command-via-command-line-interface – MonsterMMORPG

+0

你的問題已經過驗證... – Kakawait

回答

1

要一個換行符成功地傳遞給另一個命令,你應該使用延遲展開而不是perecent擴張。

setlocal EnableDelayedExpansion 
set LF=^ 


set "text=ST_METHOD_POST', 'POST', true);" 
set "text=!text!!LF!define('HTTP_REQUEST_METHOD_PUT',  'PUT',  true);" 
set "text=!text!!LF!define('HTTP_REQUEST_METHOD_DELETE', 'DELETE', true);" 
echo ---- 
echo !text! 
echo ---- 
curl -k -s -H "X-Redmine-API-Key: %API_KEY%" --data-urlencode "paste[text]=!TEXT!" !URL! 

嘗試,如果真的text包含換行符比這應該工作。

+0

例如。我的src是一個多行文件。如果你寫set/p text = Kakawait

+0

您可以使用for循環從文件中讀取多行文本,但當您連接時需要添加!LF!換行符。我編輯了我的答案 – jeb

+0

你好jeb我真的不明白你的答案你能幫我這個:http://stackoverflow.com/questions/26719068/how-can-i-run-this-curl-command-via-command-線路接口 – MonsterMMORPG

1

Windows環境變量不支持多行字符串。也許你可以寫的文字(包括前導paste[text]=)到一個文件中,並使用

curl --data-urlencode [email protected] ... 
+0

我試着像你說的那樣。 一個文本文件(在我的前只是你好世界沒有多行)。然後我編寫了我的捲曲 - 數據 - urlencode粘貼[文本] @ file.txt ... 它捲曲的問題將我的文本轉換爲「文本」:「| h \ u0000e \ u00501 \ u00501 \ u0000o \ u0000 \ u0000w \ u0000o \ u0000r \ u0000l \ u0000d \ u0000" 的,. 我讀了\ u0000表示null char o。O所以最終結果不起作用:'( – Kakawait

+0

查看上面的更新1 – Kakawait

+0

環境變量可以包含多行文本,最簡單的是換行本身。由'set LF = ^'定義,後跟兩個空行 – jeb

2

這裏是完美的作品發佈在Windows的多線SSL POST捲曲請求(它也可以從批處理/ CMD文件):

curl -i -k -X POST -H "Content-Type: text/xml" -d   ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>    ^
    ^<Transaction^>           ^
     ^<SomeParam1^>AD6084-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^>[email protected]^</Client_Email^>  ^
     ^<Client_IP^>123.4.56.7^</Client_IP^>    ^
     ^<Tax1Amount^>^</Tax1Amount^>      ^
     ^<Tax2Amount^>^</Tax2Amount^>      ^
    ^</Transaction^>          ^
" "https://example.com/transaction" 
+0

這適用於Windows。在unix/linx中是'\' –