背景:
用java程序模拟如下过程:
第一个页面取的验证码,然后再打开第二个页面,输入该验证码即可,但前提是这两个页面要在同一个浏览器窗口打开,如果在不同的窗口打开,那个验证码就无效了。我的做法: 
用url类来实现:
public static String getHttp(String urls, String para) {
String line = null;
try {
// Send data
URL url = new URL(urls);URLConnection conn = url.openConnection();conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn
.getOutputStream());wr.write(para);
wr.flush();// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn
.getInputStream()));
line = "";
String rs;
while ((rs = rd.readLine()) != null) {
line = line + rs;
}
wr.close();
rd.close();
} catch (Exception e) {
logger.error(e);
}return line;}我用联系两次调用该方法来实现两次访问页面的手法,实现不了~~~~
各位有什么办法吗?ps:第二个页面应该是要依靠第一个页面的session才能访问成功两个例子网页如下:登陆12530彩铃网站的两个连接 
http://gd.12530.com/user/getvalidcode.do?/user/getvalidcode.do?reload=&tmpurl=/user/querypersonaltone.do?type=tone&phonenumber=你的手机号码(请您输入验证码)http://gd.12530.com/user/checkvalidcode.do?reload=&tmpurl=%2Fuser%2Fquerypersonaltone.do%3Ftype%3Dtone&inputvalidcode=手机收到的验证码(输入验证码)

解决方案 »

  1.   

    发起第一次HTTP请求时,在Http的Header中可以取到SessionID;
    在发起第二次HTTP请求时,将SessionID设置在Headers中,发出请求即可实现。用浏览器是浏览器在后台做了这些工作,如果自己编程,必须实现此功能。具体的代码就不用我写了吧。
      

  2.   

    public static void main(String[] args) {
        Test test1 = new Test();
        HttpURLConnection con1 = null;
        HttpURLConnection con2 = null;
        URL url = null;
        DataInputStream din = null;
        DataOutputStream dout = null;
        try {
          url = new URL("http://127.0.0.1:8080/WebModule1/servlet1");
          //第一个HTTP连接请求取得服务器分配的Session ID
          con1 = (HttpURLConnection) url.openConnection();
          con1.setRequestMethod("GET");
          con1.setRequestProperty("x-nokia-msisdn", "aaaaaaaaaa");
          Map map = con1.getRequestProperties();
          Set keyset = map.keySet();
          Object[] o = keyset.toArray();
          System.out.println("\n=======getProperyties: ==============");
          for (int i = 0; i < o.length; i++) {
            System.out.println( (String) o[i] + " : " +
                               con1.getRequestProperty( (String) o[i]));
          }
          ///输出HTTP头信息;
          Map mheader = con1.getHeaderFields();
          keyset = mheader.keySet();
          o = keyset.toArray();
          System.out.println("\n=========Http Headers============= ");
          for (int i = 0; i < o.length; i++) {
            System.out.println( (String) o[i] + " : " +
                               con1.getHeaderField((String)o[i]));
          }
          String sessionid= con1.getHeaderField("Set-Cookie");
          int pos = sessionid.lastIndexOf(";");
          sessionid = sessionid.substring(0,pos);
          System.out.println("sessionID: "+sessionid);      System.out.println("\n========connection 1 =============");
          din = new DataInputStream(con1.getInputStream());
          int len = con1.getContentLength();
          System.out.println("Content-type: " + con1.getContentType());
          System.out.println("Content-Encoding: " + con1.getContentEncoding());
          byte[] b = new byte[len];
          //con1.setDoInput(true);
          for (int i = 0; i < len; i++) {
            b[i] = din.readByte();
          }
          String response = new String(b);
          System.out.println("\n========response content con1 ===============");
          System.out.println(response);      ///第二个HTTP连接请求将Session ID等相关信息送回服务器
           con2 = (HttpURLConnection)url.openConnection();
           con2.setRequestProperty("Cookie",sessionid);
           System.out.println("\n========connection 2 =============");
           din = new DataInputStream(con2.getInputStream());
           len = con2.getContentLength();
           System.out.println("Content-type: " + con2.getContentType());
           System.out.println("Content-Encoding: " + con2.getContentEncoding());
            b = new byte[len];
           //con1.setDoInput(true);
           for (int i = 0; i < len; i++) {
             b[i] = din.readByte();
           }
            response = new String(b);
           System.out.println("\n========response content con2 ===============");
           System.out.println(response);
        }
        catch (IOException e) {
          System.out.println(e.toString());
        }
      }