之前遇到这样的需求,弄了半天才成功,记录一下
定义变量
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;
}