文档章节

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

Arthur126
 Arthur126
发布于 2015/08/21 22:21
字数 508
阅读 675
收藏 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
自定义实现session持久化

自定义实现session持久化 使用场景 对于有登录校验的网站,tomcat 重启之后,刷新页面又得重新登录,影响用户体验. 原因: tomcat 的session 在内存中,tomcat重启之后,内存中的session就销毁了....

黄威
10/14
0
0
SpringMVC 实现自定义的session 共享(同步)机制

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

黄威
06/29
0
0
并发编程 ThreadLocal源码分析

引入ThreadLocal的场景 最近在写项目的时候自己也有疑虑,因为这个项目涉及到爬虫,使用的WebMagic这款垂直爬虫框架 垂直式爬虫 垂直型爬虫关注内容与准确还有效率.比较常见的就是舆情项目,...

红色迷宫
07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
5分钟前
0
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
1
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
3
0
Mybatis 学习笔记四 MyBatis-Plus插件

Mybatis 学习笔记四 MyBatis-Plus插件 maven依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <ve......

晨猫
昨天
4
0
小白带你认识netty(二)之netty服务端启动(下)

承接上一篇小白带你认识netty(二)之netty服务端启动(上),还剩下两步骤:3、注册Selector:将Channel注册到Selector上 和 4、端口的绑定:服务端端口的监听。 3、注册Selector:将Chann...

天空小小
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部