.Net でのクエリ引数のエンコードについて

VB.Net などで HTTP を使用してファイル送受信を行いたい場合,System.Net.WebClientクラスを利用するのが最も手軽です。

WebClient.UploadFile()
ファイル送信(アップロード)
WebClient.DownloadFile()
ファイル受信(ダウンロード)

.Net の WebClientクラスを使用して HTTP ファイル転送を行う場合,クエリ引数を QueryStringプロパティを用いて次のように指定します。
Using webClient As new WebClient
webClient.QueryString("UserName") = "UserName"
webClient.QueryString("Password") = "Password"
webClient.UploadFile(uploadURI, uploadFilePath)
End Using
クエリパラメータに日本語(2バイトコード)が含まれている場合,いくつかのプログラム例では
webClient.QueryString("UserFullName") =
System.Web.HttpUtility.UrlEncode(userFullName)
のようにURLエンコードするように紹介されていますが,実際に行った結果では(少なくとも 2.0 では)最初の例のように代入するだけでエンコードが行われるようです。

なおWebClientクラスはクエリ文字列を常にUTF-8でエンコードします。受信側がこれ以外のコードを前提としている場合,例えば Tomcat のサーブレットでパラメータを取得するような場合には,コード処理に多少の工夫が必要です。

VB.Net のクライアントから Tomcat 上で動作するサーブレットにクエリ引数を渡す場合のコード例を示します。
--- VB.Net ---
Using webClient As new WebClient
webClient.QueryString("UserName") = "UserName"
webClient.QueryString("Password") = "Password"
webClient.UploadFile(servletURI, uploadFilePath)
End Using

--- Tomcat Servlet ---
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
...............................................
String userName = getRequestParameter(request, "UserName");
String password = getRequestParameter(request, "Password");
...............................................
}

private String getRequestParameter(HttpServletRequest request,
String parname)
throws UnsupportedEncodingException {
String param = request.getParameter(parname);
if(param == null) {
return null;
} else {
return new String(param.getBytes("ISO-8859-1"), "UTF-8");
}
}


この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
rank← ランキングはこちらをクリック!

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。