java.net.URLConnection类_java模拟浏览器

最近做个产品要用爬虫获得信息,可是这个网页要模拟浏览器输出,我参考了网上很多setRequestProperty里面User-Agent都写得Mozilla/5.0结果还是不能访问,最后研究了一下写出来了。

public static String URLPostConnReturnHtml(String ip){

URL url = null ;
HttpURLConnection conn = null ;
BufferedReader br = null ;
InputStreamReader isr = null ;
InputStream is = null ;
OutputStream os = null ;
OutputStreamWriter writer ;
int responseCode ;
String readerLine = "" ;
StringBuffer htmlCode = new StringBuffer() ;
String htmlCodeStr = "" ;
try {
url = new URL("http://www.yougetsignal.com/tools/whois-lookup/php/get-whois-lookup-json-data.php") ;
conn= (HttpURLConnection)url.openConnection() ;
conn.setConnectTimeout(TIME_OUT) ;
conn.setReadTimeout(TIME_OUT) ;
//设置可以输出
conn.setDoOutput(true) ;
//设置可以读取默认是true
conn.setDoInput(true) ;
//设置不适用缓存,因为我们的数据是实时更新的
conn.setUseCaches(false) ;
//设置请求方式为post,默认是get
conn.setRequestMethod("POST") ;
//设置所有的http连接自动处理重定向
HttpURLConnection.setFollowRedirects(true) ;
//设置本次连接自动处理重定向
conn.setInstanceFollowRedirects(true) ;
//模拟ios 谷歌浏览器访问
conn.setRequestProperty("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11") ;
//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded") ;

os = conn.getOutputStream() ;
writer = new OutputStreamWriter(os ,"utf-8") ;
writer.write("remoteAddress="+ip) ;
writer.flush() ;
writer.close() ;
responseCode= conn.getResponseCode() ;
//TODO:如果得到返回html代码,则读取
if(responseCode == 200){
is = conn.getInputStream() ;
isr = new InputStreamReader(is) ;
br = new BufferedReader(isr) ;
readerLine = br.readLine() ; 
while(readerLine != null){
htmlCode.append(readerLine) ;
readerLine = br.readLine() ;
}
}else{
System.out.println(errorResponseStr + responseCode);
}
htmlCodeStr = htmlCode.toString() ;
} catch (Exception e) {
e.printStackTrace() ;
RETRY_COUNT++;
System.out.println(errorNetConnStr + RETRY_COUNT);
if (RETRY_COUNT < RETRY_COUNT_BREAK) {
htmlCodeStr = URLPostConnReturnHtml(ip);
}else{
System.out.println("网络连接失败!");
}
}finally{
try {
if(br!=null){
br.close() ;
}
if(isr!=null){
isr.close() ;
}
if(isr!=null){
is.close() ;
}
if(os!=null){
os.close() ;
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("IO流关闭错误--->");
e.printStackTrace();
}
if(conn!=null){
conn.disconnect() ;
}
}
System.out.println(htmlCodeStr);
return htmlCodeStr ;
}

时间: 2024-11-18 01:04:47

java.net.URLConnection类_java模拟浏览器的相关文章

java代码执行js-java代码模拟浏览器,访问网页;使网页中的统计代码能执行。

问题描述 java代码模拟浏览器,访问网页:使网页中的统计代码能执行. 我的操作步奏: 1.Eclipse里面写个简单的jsp页面,加入CNZZ统计脚本,启动服务器. 2.浏览器访问.浏览器中访问jsp,CNZZ系统能统计到该次访问.3.java代码访问.HttpClient的get请求访问同一地址(浏览器中地址),能获得正确响应,但是CNZZ系统,统计不到该次访问.也就是说没有执行统计脚本. 第三点中如何让CNZZ统计到代码的访问???(我百度查看过很多文章,一般就停留在获取页面代码,不能像浏

深入理解Java 对象和类_java

Java作为一种面向对象语言.支持以下基本概念: •多态 •继承 •封装 •抽象 •类 •对象 •实例 •方法 •消息解析 本节我们重点研究对象和类的概念. •对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. •类:类是一个模板,它描述一类对象的行为和状态. Java中的对象 现在让我们深入了解什么是对象.看看周围真实的世界,会发现身边有很多对象,车,狗,人等等.所有这些对象都有自己的状态和行为. 拿一条狗来举例,它的状态有

java文件操作工具类_java

最近为了修改大量收藏的美剧文件名,用swing写了个小工具,代码是文件处理部分,具体内容如下 package datei.steuern; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter

Java Socket编程(二) Java面向连接的类_Java编程

文章来源:aspcn 作者:孙雯 Java面向连接的类 Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序与它们出发时的顺序时一样.无连接的sockets操作就像是一个邮件投递,,没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样. 到底用哪种模式是邮应用程序的需要决定的.如果可靠性更重要的话,用面向连接的操作会好一些.比如文件服务器需要他们的数据的正确性和有序性.如果一些数据丢失

Java图像处理工具类_java

本工具类的功能:缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等 复制代码 代码如下: package net.kitbox.util; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Re

URLconnection 类建立连接问题

问题描述 URLconnection 类建立连接问题 如服务器地址为 Http://172.16.16.16:8080文件地址为 C:myDocumentaaaa.ptf 使用URL url = new URL("""");连接上该文件括号内的地址怎么填 解决方案 要geturl方法实现 解决方案二: java中用URLConnection 类post方式提交表单URLConnection类 解决方案三: URL中必须有 http:// 或者 ftp:// 或者 f

htmlutil-java如何模拟浏览器执行js引擎

问题描述 java如何模拟浏览器执行js引擎 由于业务需要做个月报,月报由后台java定时任务生成,现模拟浏览器访问生成PDF,月报内容主要由highcharts组成.前段时间使用htmlunit已经实现了js引擎执行,但是htmlutil对js执行不是很好,所以由highcharts形成的报表,数据不完整,求大神指教,或能提供更好的解决方案,谢谢 解决方案 封装个浏览器引擎应该能实现 解决方案二: 不需要模拟浏览器执行脚本吧,只要在页面上定时调用你的生成报表action就可以了啊.

java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)_java

一般在项目开发中难免遇到外部接口的调用,本文实例讲述了java后台调用HttpURLConnection类模拟浏览器请求的方法.可用于接口调用.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.cplatform.movie.back.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import ja

模拟Ping操作的一个Java类_java

本文为大家分享了模拟Ping操作的一个Java类,具体内容如下 import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; /** * Created by QiuJU * on 2014/9/21. */ public class SimplePing implements Runnable { private final Object mEndLock = new