1

私がやろうとしているのは、NSIS インストーラーのカスタム ページ内から、クエリ文字列または HTTP POST を含む HTTP GET を Web サービスに送信することだけです。

問題は、ほとんどのプラグインがファイルをアップロード/ダウンロードできることですが、単純にサービスを呼び出して応答を返すことはできません。使用する推奨プラグインは NsisUrlLib です。これを試してみましたが、単純な GET リクエストで動作しますが、URL に次のようなクエリ文字列パラメーターがあると失敗し、エラーがスローされます。

NsisUrlLib::UrlOpen /NOUNLOAD "http://tc.hwidev.com?var=value"
Pop $connectResult

NSISdl、INetC、およびその他のプラグインはクエリ文字列で動作しますが、ファイルのアップロード/ダウンロードにのみ使用できます。

ExecDos プラグインを使用して、次のようにコマンド ラインから cURL.exe を呼び出してみました。

ExecDos::exec /TOSTACK "curl" "http://tc.hwidev.com"
Pop $connectResult

しかし、NSIS に渡された URL から返されたデータを取得する方法がわかりません。上記のコードは、おそらく CURL からの戻りコードを表す整数を $connectResult に返すだけです。URL から返された実際の HTML を NSIS スタックまたは変数に取得するにはどうすればよいですか?

または、これを達成するためのより良い方法を誰かが推奨できますか? Web サービスの呼び出しは非常に基本的なことのように思えるので、何千人もの人々が既にこれを理解しているはずです。

4

3 に答える 3

1

NSISdl、Inetc などは、ファイルのアップロード/ダウンロードだけではありません。あなたはこの点を誤解していると思います。それらを使用して REST API を呼び出すことができますが、回答をローカル ファイルに保存してから解析する必要があります。

例: XML に応答する REST API の呼び出し:

# Call to REST API
NSISdl::download_quiet "http://remotesite?restparams" "$TEMP/result.xml"

# Parse answer
nsisXML::create
nsisXML::load "$TEMP/result.xml"
nsisXML::select "/response/status"

# Clean
delete "$TEMP/result.xml"

それでおしまい。

于 2013-03-25T11:05:51.340 に答える
1
NSISdl::download_quiet "http://127.0.0.1/vid.php?vid=1" "$TEMP/checkvid.txt"   

FileOpen $0 $TEMP\checkvid.txt r

FileRead $0 $1

詳細印刷 $1

ファイル閉じる $0

${If} $1 == "vidNTYE1203"

MessageBox MB_OK 「ビデオが見つかりました」

「$TEMP\checkvid.txt」を削除         

${その他}

MessageBox MB_OK 「バイバイ」

「$TEMP\checkvid.txt」を削除

終了する

${EndIf}

これは本番用の私の作業スニペットです。私にとってはうまく機能しています。「削除」コマンドと「\」スラッシュに注意してください。

于 2017-01-25T15:54:45.803 に答える
0

NsisUrlLibよりも INetCをお勧めします。古い Firefox インストーラーはこれを使用して多くの成功を収めました。

于 2013-03-22T17:58:53.550 に答える