通過HttpURLConnection模擬post表單提交
package junit; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import org.junit.Test; import com.hrtx.util.StreamTool; public class EsmTest { /** * 通過HttpURLConnection模擬post表單提交 * @throws Exception */ @Test public void sendEms() throws Exception { String wen = "MS2201828"; String btnSearch = "EMS快遞查詢"; URL url = new URL("http://www.kd185.com/ems.php"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");// 提交模式 // conn.setConnectTimeout(10000);//連接超時 單位毫秒 // conn.setReadTimeout(2000);//讀取超時 單位毫秒 conn.setDoOutput(true);// 是否輸入參數 StringBuffer params = new StringBuffer(); // 表單參數與get形式一樣 params.append("wen").append("=").append(wen).append("&") .append("btnSearch").append("=").append(btnSearch); byte[] bypes = params.toString().getBytes(); conn.getOutputStream().write(bypes);// 輸入參數 InputStream inStream=conn.getInputStream(); System.out.println(new String(StreamTool.readInputStream(inStream), "gbk")); } }
封裝后的代碼:
/** * 通過HttpURLConnection模擬post表單提交 * * @param path * @param params 例如"name=zhangsan&age=21" * @return * @throws Exception */ public static byte[] sendPostRequestByForm(String path, String params) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");// 提交模式 // conn.setConnectTimeout(10000);//連接超時 單位毫秒 // conn.setReadTimeout(2000);//讀取超時 單位毫秒 conn.setDoOutput(true);// 是否輸入參數 byte[] bypes = params.toString().getBytes(); conn.getOutputStream().write(bypes);// 輸入參數 InputStream inStream=conn.getInputStream(); return StreamTool.readInputStream(inStream); }
package com.hrtx.util; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class StreamTool { /** * 從輸入流中讀取數據 * @param inStream * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len = inStream.read(buffer)) !=-1 ){ outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray();//網頁的二進制數據 outStream.close(); inStream.close(); return data; } }
