使用https/http协议(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

我正在尝试使用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
协议)

我怎样才能解决这个问题?
有人请帮忙

记住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()