问题描述:
有2个URL连接,需要在第一个URL保持在线的状态下,发送第二个URL数据请求才能获取到数据
解决方案:
public void requestUrl(String url1, String url2) {
HttpURLConnection connection = null;
Reader read;
BufferedReader bufferReader;
try {
CookieManager manager = new CookieManager();//关键的地方
CookieHandler.setDefault(manager);
URL url = new URL(url1);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
//打印请求头信息
Map hfs = con.getHeaderFields();
Set<String> keys = hfs.keySet();
for (String str : keys) {
List<String> vs = (List) hfs.get(str);
System.out.print(str + ":");
for (String v : vs) {
System.out.print(v + "\t");
}
System.out.println();
}
System.out.println("-----------------------");
url = new URL(url2);
connection = (HttpURLConnection) url.openConnection();
//connection.setConnectTimeout(30000);//可以去掉
connection.setRequestMethod("GET");
//connection.setReadTimeout(30000);
InputStream in = connection.getInputStream();
//获取读取的方式
read = new InputStreamReader(connection.getInputStream());
bufferReader = new BufferedReader(read);
//获取服务器返回的字符串
String str;//读取每一行数据
StringBuffer buffer = new StringBuffer();//接受全部数据
while ((str = bufferReader.readLine()) != null) {
buffer.append(str + "\n");
}
//关闭连接
read.close();
connection.disconnect();
//测试
Log.d("发出去的请求", url2.toString());
Log.d("读取来的数据", buffer.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
buffer.toString即为读取的数据,该方法的关键地方在于下面两行代码:
CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);
主要实现为第二个URL设置整个cookie信息,而不单单是sessionID。