使用https/http协议(Java)登录后如何浏览网站
我正在尝试使用Java登录网站,我成功了。下面是我使用的代码使用https/http协议(Java)登录后如何浏览网站,java,http,https,Java,Http,Https,我正在尝试使用Java登录网站,我成功了。下面是我使用的代码 String query = "myquery"; URL url = new URL(loginUrl); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-length", Stri
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
协议)
我怎样才能解决这个问题?
有人请帮忙记住HTTP是完全无状态的。“登录”到站点的想法转化为(通常)从HTTP角度设置cookie。这些cookie只是HTTP头,它们随浏览器的每个后续请求一起发送。因此,要保持登录状态,您需要从响应头中获取cookie并将其与未来的请求一起发送 以下是如何: 从响应中检索cookies: 打开与服务器的java.net.url连接:
URL myUrl = new URL("http://www.hccp.org/cookieTest.jsp");
URLConnection urlConn = myUrl.openConnection();
urlConn.connect();
通过响应头循环查找Cookie:
由于服务器可能在一个请求中设置多个Cookie,因此我们需要循环遍历响应头,查找所有名为“set Cookie”的头
从cookie字符串中提取cookie名称和值:
getHeaderField(int index)方法返回的字符串是一系列名称=值,由分号(;)分隔。第一个名称/值配对是我们感兴趣的实际数据字符串(即“sessionId=0949eeee2222rtg”或“userId=igbrown”),随后的名称/值配对是我们将用于管理cookie存储的元信息(当cookie过期时,等等)
基本上就是这样。我们现在有了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(字符串名称、字符串值)
方法,我们将添加一个名为“Cookie”的属性,将在上一步中创建的Cookie字符串作为属性值传递
urlConn.setRequestProperty("Cookie", myCookie);
将cookie发送到服务器:
要发送cookie,只需对已添加cookie属性的URLConnection调用connect():
urlConn.connect()
第一个连接使用Https,第二个连接使用Http。为什么要保持连接状态?很抱歉,我错过了。只有登录页面使用HTTPS,其他页面使用HTTP。所以我很困惑…如果你从网络浏览器访问网站会发生什么?它是否从HTTPS更改为HTTP?您是否仍保持登录状态?web服务器似乎使用了HTTP Cookie的某种会话。在这种情况下,您需要存储来自第一个(登录)响应的cookie,并将其传递给第二个请求。是的,它将从HTTPS HTTP剩余登录状态更改。登录成功后,它会重定向页面。(从到,abc域更改)[链接]谢谢您的回答。若要向请求添加Cookie,setRequestProperty()方法不应使用多次。(立即使用setRequestProperty()方法添加cookie)
urlConn.setRequestProperty("Cookie", myCookie);
urlConn.connect()