3

Windows用のcURLコマンドラインをインストールしました。

ここで、このcURLをREST api(redmine)に使用したいと思います。

私が作成したい最も基本的なスクリプトは、新しい「過去」をプッシュすることです。ただし、問題は、1つの過去に複数行のテキストが含まれている可能性があることです。

新しい過去を置くために私は使用します:

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は最初の改行の後で停止します...

複数行のwincmdをシミュレートするために、行の最後に^を追加して、cmdを実行する前にTEXTを解析しようとしましたが、機能しません...


アップデート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で複数行のSSLPOSTcurlリクエストを発行するために完全に機能するものは次のとおりです(batch / 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

ラインフィードを別のコマンドに正常に渡すには、パーセント拡張ではなく遅延拡張を使用する必要があります。

で試してみてください

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 に答える
1

Windows環境変数は、複数行の文字列をサポートしていません。おそらく、テキスト(先頭を含むpaste[text]=)をファイルに書き込んで使用することができます

curl --data-urlencode data@FILE ...
于 2012-11-25T00:49:25.167 に答える