`
dengminhui
  • 浏览: 167932 次
  • 来自: ...
社区版块
存档分类
最新评论

使用URLConnection获得网页内容

阅读更多
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HttpClient {

	public static final String METHOD_GET = "GET";

	public static final String METHOD_POST = "POST";

	private String url;

	private String cookie;

	HttpURLConnection httpConn = null;

	private boolean connected = false;

	private Map<String, String> requestHeader = new HashMap<String, String>();

	private static final String USER_AGENT = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)";

	public HttpClient(String url) {
		this(url, null);
	}

	public HttpClient(String url, String cookie) {
		this.url = url;
		this.cookie = cookie;
	}

	public void addRequestHeader(String key, String value) {
		this.requestHeader.put(key, value);
	}

	public void connect(String method) throws IOException {
		try {
			URLConnection con = new URL(url).openConnection();
			if (con instanceof HttpURLConnection) {
				httpConn = (HttpURLConnection) con;
			}
			if ("POST".equals(method)) {
				httpConn.setDoInput(true);
				httpConn.setDoOutput(true);
				httpConn.setRequestProperty("Content-Type",
						"application/x-www-form-urlencoded");
			}
			httpConn.setInstanceFollowRedirects(false);
			httpConn.setRequestMethod(method);
			if (cookie != null) {
				httpConn.addRequestProperty("Cookie", cookie);
			}
			httpConn.setRequestProperty("User-Agent", USER_AGENT);
			httpConn.setUseCaches(false);

			if (!this.requestHeader.isEmpty()) {
				for (String key : this.requestHeader.keySet()) {
					httpConn.setRequestProperty(key, this.requestHeader
							.get(key));
				}
			}

			httpConn.connect();

			connected = true;
		} catch (MalformedURLException e) {
			throw new IOException(e);
		}
	}

	public boolean followRedirects() throws IOException {
		int resultCode = httpConn.getResponseCode();
		return (resultCode >= 300 && resultCode < 400);
	}

	public String getLocation() {
		String location = httpConn.getHeaderField("Location");
		if (location == null) {
			location = httpConn.getHeaderField("location");
		}
		return location;
	}

	public InputStream getInputStream() throws IOException {
		return httpConn.getInputStream();
	}

	public String getBodyString() throws IOException {
		return getBodyString(null);
	}

	public String getBodyString(String charset) throws IOException {
		BufferedReader reader;
		if (charset == null) {
			reader = new BufferedReader(new InputStreamReader(getInputStream()));
		} else {
			reader = new BufferedReader(new InputStreamReader(getInputStream(),
					charset));
		}
		StringBuffer sb = new StringBuffer();
		String inputLine = null;
		while ((inputLine = reader.readLine()) != null) {
			sb.append(inputLine);
		}
		return sb.toString();
	}

	public void post(List<String> dataList) throws IOException {
		PrintWriter out = new PrintWriter(httpConn.getOutputStream());
		StringBuffer postData = new StringBuffer();
		for (String data : dataList) {
			postData.append(data).append("&");
		}
		out.write(postData.toString());
		out.flush();
		out.close();
	}

	public String getCookie() {
		String key = null;
		String cookie = "";
		for (int i = 1; (key = httpConn.getHeaderFieldKey(i)) != null; i++) {
			if ("set-cookie".equalsIgnoreCase(key)) {
				String cookieVal = httpConn.getHeaderField(i);
				cookieVal = cookieVal.substring(0, cookieVal.indexOf(";"));
				cookie = cookie + cookieVal + ";";
			}
		}
		return cookie;
	}

	public void disconnect() {
		if (connected) {
			httpConn.disconnect();
			connected = false;
		}
	}

	public static void main(String[] args) throws IOException {
	    String url="http://renmai.china.alibaba.com/personal/index.html";
	    String cookie="******";
	    HttpClient hc = new HttpClient(url,cookie);
	    hc.connect(METHOD_GET);
	    System.out.println(hc.getBodyString());
	    System.out.println(hc.getCookie());
	    hc.disconnect();
	}

}

 在这个页面不需要登录的时候,这个方法是非常简单的,cookie可以不设置,但是如果需要登录的话,就比较麻烦,这时可以采用fiddler等web代理工具,在打开此页面时将header中的值抓取出来,拷贝到程序中,则问题即解决,如附件图所示:

 

 

 

  • 大小: 78.4 KB
分享到:
评论

相关推荐

    java将网页保存成mht格式文件

    2. **解析HTML**:得到网页内容后,可以使用HTML解析库,如Jsoup,来解析HTML文档结构。Jsoup能提供方便的API来提取和操作DOM元素。 3. **处理嵌入资源**:MHT文件需要包含所有嵌入的图片和其他资源。因此,对于...

    正则表达式解析出页面所有链接,并得到链接的内容

    在Java中,我们可以使用`java.net.URL`和`java.net.URLConnection`类,或者更现代的`HttpURLConnection`,或者第三方库如Apache HttpClient或OkHttp。以下是一个简单的示例,使用`HttpURLConnection`: ```java URL...

    java-swing-通过ip获取网站信息(网页抓取)

    - 通过`getInputStream()`获得服务器的响应流,然后可以使用`BufferedReader`读取内容。 7. **处理HTML内容**: - 一旦获得HTML内容,可以使用`Jsoup`库来解析和提取所需信息。`Jsoup`是一个强大的库,它使得解析...

    HttpClient入门陆小马功钟浩.pdf

    使用URL类的实例可以打开一个网络资源的输入流,获取网页内容是网络编程中最基础的操作之一。通过建立URL对象,并调用openStream方法,可以直接获得资源的InputStream。为了提高效率和兼容性,通常会将InputStream...

    java http客户端

    Java HTTP 客户端是指使用 Java 语言实现的 HTTP 客户端程序,它能够根据给定的 URL,获得指定 URL 所指向的内容,并对获得的内容进行进一步的解析和处理。下面是关于 Java HTTP 客户端的详细知识点: 一、HTTP ...

    一个简单的获取URL 数据方法,附文档代码

    通过URL对象的`openConnection()`方法获得URLConnection实例。 ##### 2. 获取输入流与输出流 - **InputStream**: 输入流,用于读取数据。 - **ByteArrayOutputStream**: 字节数组输出流,可以将其视为内存中的文件...

    xml文件源码数据提取

    - 要从网页中提取XML源码,可以使用`java.net.URL`和`java.net.URLConnection`类连接到网页。 - 通过`BufferedReader`读取网页内容,然后寻找XML标签,提取出XML字符串。 - 接下来可以使用DOM、SAX或JAXB来解析这...

    自己动手写网络爬虫

    2. 使用URL对象打开一个连接,得到一个URLConnection对象。 3. 通过URLConnection对象向服务器发送请求,并获取服务器响应的输入流。 4. 从输入流中读取数据,通常需要将输入流转换为字符串或者直接写入到文件中。 5...

    Java爬取网站源代码和链接代码实例

    爬虫可以从一个或多个初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。 爬虫技术可以分为两种:通用爬虫和专用爬虫。通用爬虫...

    疯狂Android讲义源码

     13.2.2 使用URLConnection  提交请求 490  13.3 使用HTTP访问网络 496  13.3.1 使用HttpURLConnection 496  13.3.2 使用Apache HttpClient 501  13.4 使用WebView视图  显示网页 505  13.4.1 使用WebView...

    java根据网址获取源码

    3. **转换为HttpURLConnection**:由于返回的是`URLConnection`类型,因此需要将其转换为`HttpURLConnection`以便使用其提供的高级功能。 4. **获取输入流并读取数据**:使用`getInputStream()`方法获取输入流,然后...

    基于java的浏览器的设计实现.ppt

    Java提供了丰富的API,如Socket和URLConnection,使得开发者可以轻松地处理HTTP请求,加载和解析网页内容。这对于构建浏览器的核心功能至关重要,比如加载网页、发送HTTP请求和接收响应。 在用户需求分析方面,考虑...

    java网络编程视频教程

    视频会介绍如何使用这些类从互联网上获取资源,包括文件下载、网页抓取等。同时,会讲解HTTPURLConnection的设置,如设置超时、处理重定向、以及POST请求的发送。 此外,NIO(非阻塞I/O)是Java 1.4引入的新特性,...

    Java开发技术大全 电子版

    12.3.3使用反射在运行时获得注释380 12.3.4AnnotatedElement接口383 12.3.5使用默认值383 12.3.6标记注释384 12.3.7单成员注释385 12.3.8内置注释386 12.3.9使用注释的一些限制390 12.4本章小结390 第13章...

    基于URL的Java网络编程

    例如,以下代码展示了如何使用`URL`类读取一个网页并将其内容打印出来: ```java try { URL url = new URL("http://www.example.com"); HttpURLConnection connection = (HttpURLConnection) url.open...

    70个JAVA问答.txt

    要获取远程文件的MIME类型,可以使用`URLConnection`类。例如,通过以下代码可以获取文件`aaa.txt`的类型: ```java URL u = new URL("file:///aaa.txt"); URLConnection uc = u.openConnection(); String s = uc....

    Android代码-Zirco浏览器源码.zip

    渲染引擎负责解析HTML、CSS和JavaScript,呈现网页内容;数据存储模块则用于保存用户的书签、历史记录等信息;设置管理模块则为用户提供自定义浏览器行为的选项。 2. **渲染引擎:Webkit与JavaScriptCore** Zirco...

Global site tag (gtag.js) - Google Analytics