HttpURLConnection で POST リクエスト
HttpURLConnection で POST リクエストを送信するサンプル。
ボディのデータですが、今回はなんとなく .zip ファイルのバイト配列を書き込むって感じにしてみました。
package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.Map; public class HttpClient { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/Tomcat8Test/TestServlet"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); // (*) con.setRequestMethod("POST"); con.setDoOutput(true); byte[] b = Files.readAllBytes(Paths.get("zip/test.zip")); OutputStream os = con.getOutputStream(); os.write(b); // (*) System.out.println("----- Headers -----"); Map<String, List<String>> headers = con.getHeaderFields(); for (String key : headers.keySet()) { System.out.println(key + ": " + headers.get(key)); } System.out.println(); System.out.println("----- Body -----"); BufferedReader reader = new BufferedReader(new InputStreamReader( con.getInputStream())); String body; while ((body = reader.readLine()) != null) { System.out.println(body); } os.close(); reader.close(); con.disconnect(); } }
リクエスト POST の指定、および、ボディの書き込みは (*) で囲った部分になります。
ボディにデータを書き込む場合、setDoOutput(true) としておく必要があるみたいです。
サーバ側はサーブレットであれば、以下の感じにしてやるとファイルとして保存できます。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletInputStream sis = request.getInputStream(); FileOutputStream fos = new FileOutputStream(getServletContext().getRealPath("/") + "test.zip"); int i; while((i = sis.read()) != -1) { fos.write(i); } fos.close(); response.getWriter().print("TestServlet OK"); }
あんまり需要なさそうかな。。以上です。