当前位置: 首页 > 图文教程 > 网络编程 > JSP > Java 获取URL的内容

JSP
我认为JSP有问题(上)
我认为JSP有问题(下)
jsp“抓”网页代码的程序
关于在bean里面打印html的利弊看法
bean里面如何打印到html页面
jdbc3中的RowSet 接口规范
Apusic Application Server1.0中jsp源代码泄漏漏洞
Unify的eWave ServletExec拒绝服务漏洞
通过提交超长的GET请求导致IBM HTTP Server远程溢出
在HTTP请求中添加特殊字符导致暴露JSP源代码文件
Resin 1.2 重要源代码暴露漏洞
多中WEB服务器的通用JSp源代码暴露漏洞
Tomcat 暴露JSP文件内容
IBM WebSphere Application Server 暴露JSP文件内容
JRun 2.3.x 范例文件暴露站点安全信息
BEA WebLogic 暴露源代码漏洞
IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞
Tomcat 3.1 存在暴露网站路径问题
Sun Java Web Server 能让攻击者远程执行任意命令
Netscape 修复 JAVA 安全漏洞

JSP 中的 Java 获取URL的内容


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 98 ::
收藏到网摘: n/a

Java的网络资源比较少,问GG问的比较失败啊,自己在不断的摸索中才知道了不少。 Java获取URL内容的,我这里只给出GET方式的,POST和其它方式的都是比较类似的。其技术要点就一下三点。
第一:创建HttpURLConnection
第二:打开URL,创建一个InputStream
第三:逐行(逐字节)读取,如果需要,转换编码,放入字符串。
好,一下就开始代码吧:
复制代码 代码如下:

public String getUrlContent(String path){
String rtn = "";
int c;
try{
java.net.URL l_url = new java.net.URL(path);
java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
l_connection.setRequestProperty("User-agent","Mozilla/4.0");
l_connection.connect();
InputStream l_urlStream = l_connection.getInputStream();
while (( ( c= l_urlStream.read() )!=-1)){
int all=l_urlStream.available();
byte[] b =new byte[all];
l_urlStream.read(b);
rtn+= new String(b, "UTF-8");
}
//Thread.sleep(2000);
l_urlStream.close();
}catch(Exception e){
e.printStackTrace();
}
return rtn;
}

其中
l_connection.setRequestProperty("User-agent","Mozilla/4.0");
这句是必须的,很多服务器对于没有User-agent头的请求直接403了就。
然后采用InputStream.available()来一次性读取,返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数,如果需要的话,可以在后面稍微Sleep一下线程:
Thread.sleep(2000);
其中的
复制代码 代码如下:

while (( ( c= l_urlStream.read() )!=-1)){
int all=l_urlStream.available();
byte[] b =new byte[all];
l_urlStream.read(b);
rtn+= new String(b, "UTF-8");
}

是个很重要的读取过程,c表示读取流的标注,当结束的时候是-1,然后all是本次循环可用的最大字节数目,然后读取全部可用字节到byte[] b中,然后转换成UTF-8类型的字符串,注意,这里可以自己写方式,如果读取GB2312,就要写GB2312,至于有没有万能的,可以获取Meta,匹配下。自己想办法吧。