文档章节

java访问获取web页面信息并记录sessionId

Arthur126
 Arthur126
发布于 2015/08/21 22:21
字数 508
阅读 672
收藏 1

        利用java的HttpURLConnection捕获网页信息,同时记录链接的sessionId。

        考虑到网页编码方式的不同,自动解析网页内容,并捕获其编码方式,并按该编码方式读取网内容。但也存在一些并非正规网页,捕获不到charset,默认iso-8859-1方式读取网页内容。

        其中该处记录sessionId可以为了下次再次访问使用同一个sessionId,欺骗服务器还在同一个会话中,比如登陆验证之类的...。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * java访问获取web页面信息
 * 可以记录sessionId供登录相关使用...
 * @author Arthur126
 * @date 2015-8-21 下午10:00:14 
 *
 */
public class CallHttpTest {
    /**
     * 网址被访问记录的sessionId
     */
    private static String    SESSION_ID    = "";

    public static String callHttp(String callURL) throws Exception {
        String result = "";
        URL u0 = new URL(callURL);
        HttpURLConnection conn = (HttpURLConnection) u0.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "text/plain");
        conn.setRequestProperty("Content-Language", "en-US");
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.setUseCaches(false);
        conn.setDoInput(true);
        conn.setDoOutput(true);

        if (SESSION_ID != null && !"".equals(SESSION_ID)) {
            // 已经记录sessionId则放入session中
            conn.setRequestProperty("Cookie", SESSION_ID);
        } else if ((SESSION_ID == null || "".equals(SESSION_ID)) && conn != null) {
            // 捕获sessionId
            String key = null;
            for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) {
                if (key.equalsIgnoreCase("set-cookie")) {
                    SESSION_ID = conn.getHeaderField(key);
                    SESSION_ID = SESSION_ID.substring(0, SESSION_ID.indexOf(";"));
                    break;
                }
            }
        }
        // 自动捕获网页编码,并按其编码方式读取网页内容
        String charset = getChareset(conn.getContentType());
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        result = buffer.toString();

        // 非正规网页,默认iso-8859-1读取网页内容
        /*InputStream in = conn.getInputStream();
        StringBuffer buffer = new StringBuffer();
        int count = 0;
        while (count != -1) {
            count = in.read();
            if (count != -1) {
                buffer.append((char) count);
            }
        }
        in.close();
        result = new String(buffer.toString().getBytes("iso-8859-1"), "UTF-8");*/

        conn.disconnect();
        return result;
    }

    /**
     * 获取网页编码方式
     * @param contentType
     * @return
     */
    public static String getChareset(String contentType) {
        int i = contentType == null ? -1 : contentType.indexOf("charset=");
        return i == -1 ? "UTF-8" : contentType.substring(i + 8);
    }

    public static void main(String[] args) throws Exception {
        System.out.println(callHttp("https://www.baidu.com/"));
        System.out.println(SESSION_ID);
    }

}

测试结果:

<html>
    
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <title>页面不存在_百度搜索</title>
        
    </head>
    
    <body link="#0000cc">
            .......略       
    </body>

</html>
__bsi=14410402226605058380_00_12_R_N_2_0301_002F_N_I_I_0


© 著作权归作者所有

共有 人打赏支持
Arthur126
粉丝 1
博文 33
码字总数 17900
作品 0
徐汇
高级程序员
Tomcat优化实践——网站运维

作为底层码农,其实并不关心项目的优化!然而如今自己却不得不面对这样的问题,服务器的优化也许是最先优化的选择。 这里我就分享一下,虽然有些不足!但希望有所分享和帮助! 一、服务器配置...

tngou
2013/12/05
0
2
基于MongoDB MapReduce的统计分析

前面已经简单介绍了MongoDB在OECP社区的一个应用:动态消息的设计实现。在上次的应用中,我们只介绍了MongoDB最基本的查询的功能,今天我再介绍一下MongoDB更加高级的应用:用MongoDB做统计分...

菜根乱谭
2012/11/30
0
0
SpringMVC 实现自定义的session 共享(同步)机制

SpringMVC 实现自定义的session 共享(同步)机制 思路 这个问题是针对线上多台服务器(例如多个tomcat,集群)负载均衡而言,如果只有一个服务器运行(提供服务),则不存在这个问题,请直接略过. 为什...

黄威
06/29
0
0
Selenium的使用:WEB功能测试

Selenium是ThrougthWorks公司一个强大的开源WEB功能测试工具系列,本系统包括多款软件 Selenium语言简单,用(Command,target,value)三种元素组成一个行为,并且有协助录制脚本工具,但Selen...

cloud-coder
2013/11/26
0
0
javaweb开发之vo,po,dto等

PO(persistant object,持久对象) 最形象的理解就是一个PO就是数据库中的一条记录。 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。 BO(business object,业务对象) ...

小米米儿小
2013/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部