Javaにて、以下を設定項目とするWebAPIの呼び出しを実装中です。
- 送信方式:POST
- Content-Type:application/x-www-form-urlencoded
- クエリパラメータ:キー1=値1&キー2=値2&キー3=値3
クエリパラメータの各値には"="や"&"が設定される可能性があるのですが、Content-Typeがapplication/x-www-form-urlencodedの場合、そもそも接続文字列として"="と"&"が使用されているため、これらを値として設定するには考慮が必要と考えております。
質問1: このような場合、そもそもエンコードにあたり考慮は必要でしょうか。
質問2: 考慮が必要である場合、どのようにクエリパラメータを作成すれば良いのでしょうか。
現在の実装
Java
1import org.apache.commons.codec.net.URLCodec.URLCodec; 2 3public request() { 4 String url = "http://webapi"; 5 StringBuilder sb = new StringBuilder(); 6 String value1 = "value1"; 7 String value2 = "hoge&fuga"; 8 String value3 = "foo=bar"; 9 sb.append("key1=").append("value1") 10 .append("&").append("key2=").append(value2) 11 .append("&").append("key3=").append(value3); 12 13 String enc = new URLCodec("URL-8").encode(sb.toString()); 14 15 HttpURLConnection conn; 16 conn = new URL(url).openConnection(); 17 conn.setRequestMethod("POST"); 18 conn.setDoOutput(true); 19 conn.setInstanceFollowRedirects(false); 20 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); 21 conn.connect(); 22 try (PrintWriter pw = new PrintWriter( 23 new BufferedeWriter( 24 new OutputStreamWriter( 25 conn.getOutputStream(), "utf-8")))) 26 { 27 pw.print(enc); 28 } 29}
※例外処理は見やすさのため除外しています。
また、文字列をエンコードするのにapache commonsのURLCodecを使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/25 04:17