3

我已经为 Windows 安装了 cURL 命令行。

现在我想将此 cURL 用于 REST api (redmine)。

我想创建的最基本的脚本是推送一个新的“过去”。但问题是,过去可以包含多行文本。

为了创造一个新的过去,我使用:

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

但问题是当 %TEXT% 由多行组成时,windows 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 之前解析 TEXT,方法是在行尾添加 ^ 以模拟多行 win 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"}}

最后的结果不起作用

4

3 回答 3

2

这是在 Windows 上发出多行 SSL POST curl 请求的完美方法(它也适用于批处理/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^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "https://example.com/transaction"
于 2013-11-20T16:11:12.183 回答
1

Windows 环境变量不支持多行字符串。也许您可以将文本(包括前导paste[text]=)写入文件并使用

curl --data-urlencode data@FILE ...
于 2012-11-25T00:49:25.167 回答
1

要成功地将换行符传递给另一个命令,您应该使用延迟扩展而不是百分比扩展。

试试看

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确实包含换行符,则应该可以。

于 2012-11-26T11:35:01.100 回答