我尝试使用Java登录网站,但我成功了。以下是我使用的代码。
String query = "myquery";
URL url = new URL(loginUrl);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-length", String.valueOf(query.length()));
con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)");
con.setDoOutput(true);
con.setDoInput(true);
DataOutputStream output = new DataOutputStream(con.getOutputStream());
output.writeBytes(query);
output.close();
DataInputStream input = new DataInputStream( con.getInputStream() );
for( int c = input.read(); c != -1; c = input.read() ) {
System.out.print( (char)c );
// this page returns JavaScript code
}
在此之后,我想访问同一个域中的另一个网页,所以我尝试了下面的代码。
URL url = new URL(anotherUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
... similar to above code ...
但此页面要求我再次登录。我认为在更改URL的过程中连接已断开连接。 (Onlt登录页面使用HTTPS
协议,其他页面使用HTTP
协议)
我该如何解决这个问题? 有人请帮忙
答案 0 :(得分:0)
请记住,HTTP完全是无状态的。 "登录"的想法到站点转换为(通常)从HTTP角度设置cookie。这些cookie只是HTTP标头,它们随浏览器的每个后续请求一起发送。因此,为了保持登录状态,您可以从响应标头中获取Cookie并将其与未来请求一起发送。
以下是:
从回复中检索Cookie:
打开java.net.URLConnection到服务器:
URL myUrl = new URL("http://www.hccp.org/cookieTest.jsp");
URLConnection urlConn = myUrl.openConnection();
urlConn.connect();
遍历响应标头寻找Cookie: 由于服务器可以在单个请求中设置多个cookie,因此我们需要遍历响应头,查找名为" Set-Cookie"的所有头文件。
String headerName=null;
for (int i=1; (headerName = uc.getHeaderFieldKey(i))!=null; i++) {
if (headerName.equals("Set-Cookie")) {
String cookie = urlConn.getHeaderField(i);
...
从Cookie字符串中提取Cookie名称和值 getHeaderField(int index)方法返回的字符串是一系列由分号(;)分隔的name = value。第一个名称/值配对是我们感兴趣的实际数据字符串(即" sessionId = 0949eeee22222rtg"或" userId = igbrown"),后续的名称/值配对是元信息我们将用它来管理cookie的存储(当它到期时等)。
cookie = cookie.substring(0, cookie.indexOf(";"));
String cookieName = cookie.substring(0, cookie.indexOf("="));
String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length());
基本上就是这样。我们现在有cookie名称(cookieName)和cookie值(cookieValue)。
在请求中设置cookie值:
必须在调用connect方法之前设置值:
URL myUrl = new URL("http://www.hccp.org/cookieTest.jsp");
URLConnection urlConn = myUrl.openConnection();
创建一个cookie字符串:
String myCookie = "userId=igbrown";
将Cookie添加到请求中: 使用
setRequestProperty(String name,String value);
方法,我们将添加名为" Cookie"的属性,将上一步中创建的cookie字符串作为属性值传递。
urlConn.setRequestProperty("Cookie", myCookie);
将cookie发送到服务器: 要发送cookie,只需在我们添加了cookie属性的URLConnection上调用connect():
urlConn.connect()