文档章节

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

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

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

黄威
2018/10/14
0
0
基于MongoDB MapReduce的统计分析

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

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

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

黄威
2018/06/29
0
0
Jsp (Java Server Pages)相关知识九大内置对象和四大作用域

一.初识JSP Jsp页面的组成:静态内容、指令、表达式、小脚本、声明、标准动作、注释等元素构成 Url:统一资源定位符 Url组成:协议、主机名(包括端口号)、路径 1.注释的方式: 1.HTML注释...

必须往前走
01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
28分钟前
0
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
43分钟前
2
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
44分钟前
2
0
input的button类型,点击页面跳转

一、input type=button 不做任何操作 例如: <input type="button" class="btn btn-primary" style="width: 30%" value="返回" onclick="window.location.href='/users/list'"></input> onc......

Sunki
50分钟前
1
0
踩坑:js 小数运算出现精度问题

背景 在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。 在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,...

dkvirus
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部