之前遇到這樣的需求,弄了半天才成功,記錄一下
定義變量
public static String cookieVal="";
public static String firstCookie="";
public static String allcookie="";
然後是請求方法,我只弄了get請求
public static String Get(String url_get,String charset) throws IOException {
// 拼湊get請求的URL字串,使用URLEncoder.encode對特殊和不可見字符進行編碼
// String getURL = GET_URL + "?username=" + URLEncoder.encode("fat man", "utf-8");
SSLContext sslcontext = null;
try {
sslcontext = SSLContext.getInstance("SSL", "SunJSSE");
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchProviderException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}//第一個參數爲協議,第二個參數爲提供者(可以缺省)
TrustManager[] tm = {new MyX509TrustManager()};
try {
sslcontext.init(null, tm, new SecureRandom());
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
// TODO Auto-generated method stub
System.out.println("WARNING: Hostname is not matched for cert.");
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
String getURL = url_get ;
// + "?" + str_param_url;
URL getUrl = new URL(getURL);
// 根據拼湊的URL,打開連接,URL.openConnection函數會根據URL的類型,
// 返回不同的URLConnection子類的對象,這裏URL是一個http,因此實際返回的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
//connection.setRequestMethod("POST");
System.out.println("allcookie:"+allcookie);
connection.disconnect();
connection.addRequestProperty("Cookie", allcookie);
Map<String,List<String>> map=connection.getHeaderFields();
Set<String> set=map.keySet();
for (Iterator iterator = set.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
if (key!=null&&key.equals("Set-Cookie")) {
System.out.println("key=" + key+",開始獲取cookie");
List<String> list = map.get(key);
StringBuilder builder = new StringBuilder();
for (String str : list) {
builder.append(str).toString();
}
firstCookie=builder.toString();
allcookie+=firstCookie+";";
System.out.println("第一次得到的cookie="+firstCookie);
}
}
// Map<String, List<String>> mp = connection.getRequestProperties();
// Set st = map.entrySet();
//
// Iterator iterator = st.iterator();
// while (iterator.hasNext()) {
// System.out.println(iterator.next());
// }
// 進行連接,但是實際上get request要在下一句的connection.getInputStream()函數中才會真正發到
// 服務器
connection.connect();
// 取得輸入流,並使用Reader讀取
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(),charset));
System.out.println("Contents of get request:");
String result="";
String lines;
while ((lines = reader.readLine()) != null) {
System.out.println(lines);
result+=lines;
}
reader.close();
connection.disconnect();
return result;
}