当前位置:文档之家› 通过JAVA语言实现使用URL访问网络资源

通过JAVA语言实现使用URL访问网络资源

通过JAVA语言实现使用URL访问网络资源
通过JAVA语言实现使用URL访问网络资源

1.URL描述

URL是统一资源定位符(Uniform Resource Locator)的简称.它表示互联网上某一资源的地址.浏览器通过给定的URL可以找到相应的文件或其他资源.在某些情况下,URL中除IP地址以外的部分可以省略.例如:在浏览器地址栏输入https://www.doczj.com/doc/609453916.html,,浏览器会默认使用http协

议及相应的端口号,并使用Web服务器提供的默认的文件.URL的一般例子,如:

https://www.doczj.com/doc/609453916.html, , ftp:192.168.10.233 及

https://www.doczj.com/doc/609453916.html,/javase/downloads/index.jsp.

在java中,使用https://www.doczj.com/doc/609453916.html,中的URL类可以创建代表互联网上某一具体资源的URL对象.通过此对象,利用相关的方法,可以轻松的进行网络资源的存取.

2.1 URL类

https://www.doczj.com/doc/609453916.html, 包提供URL类,用URL对象表示URL地址.

(1) URL类的构造方法

URL类提供多种不同的构造方法,用于以不同形式创建URL对象.

public URL(String spec) throws MalformedURLException

public URL(URL context, String spec) throws MalformedURLException

public URL(String protocol, String host, String file) throws MalformedURLException public URL(String protocol, String host, int port, String file) throws MalformedURLException

其中,参数spec是由协议名,主机名,端口号,文件名组成的字符串.参数context是已建立的URL对象,参数protocol是协议名,参数host是主机名,参数file是文件名,对数port是端口号.

下面通过各种构造方法创建URL对象,分别以不同的方式提供URL地址的各部分信息

URL myURL1=new URL(“https://www.doczj.com/doc/609453916.html,:80/”);

URL myURL2=new URL(“myURL1”,”support/fap.html”);

URL myURL3=new URL(“http”,”https://www.doczj.com/doc/609453916.html,”,”index.html”);

URL myURL4=new URL(“http”,”https://www.doczj.com/doc/609453916.html,”,80,”index.html”);

上面的myURL2地址是由myURL1地址和用相对路径表示的文件名会成的,代表的URL地址是:https://www.doczj.com/doc/609453916.html,:80/support/fap.html

(2)获取URL对象的属性

一个URL对象中包括各种属性,属性不能被改变,但可以通过下面的方法获取属性

public String getProtocol() //获取URL的协议名

public String getHost() //获取URL 的主机名

public int getPort() //获取URL的端口号

public String getPath() //获取URL的文件路径

public String getFile() //获取URL的文件名

public String getRef() //获取URL在文件中的相对位置

public String getQuery() //获取URL的查询名

2.2 利用URL访问网上资源

一个URL对象对应一个网址,,生成URL对象后,就可以调用URL对象的openStream()方法读取网址中的信息.openStream()方法的原型如下:

public final InputSream openStream()

调用openStream()方法获取的是一个InputSream输入流对象,通过read()方法只能从这个输入流中逐字节读取数据,也就是从URL网址中逐字节读取信息,为了能方便地从URL读取信息,通常将原始的InputSream输入流转变为其他类型的输入流,如BufferedReader等,比如

读出网址https://www.doczj.com/doc/609453916.html,的主页内容.

package com.fenley.test;

import https://www.doczj.com/doc/609453916.html,.*;

import java.io.*;

public class Web {

/**

* @param args

*/

public static void main(String[] args) {

URL url=null;

InputStream is=null;

try{

url=new URL("https://www.doczj.com/doc/609453916.html,");

is=url.openStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

String line;

while((line=br.readLine())!=null)

System.out.println(line);

}catch(Exception ex){

ex.printStackTrace();

}finally{

try {

if (is != null)

is.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

从以上实现网络资源的存取程序代码来看,使用https://www.doczj.com/doc/609453916.html,中的URL类可以轻松实现网络资源的存取.只是要注意:URL类的构造方法都抛出MalformedURLException异常,用于处理创造URL对象可能产生的异常.

3. 结束语

上面实现的网络资源的存取只是简单地使用https://www.doczj.com/doc/609453916.html,中的URL类实现的过程,但却很实用,对于开发java在内置的网络能力方面将具有一定的指导的意义.

eoLinker-API_Shop_猫咪大全_API接口_Java调用示例代码

eoLinker-API Shop 猫咪大全 Java调用示例代码 猫咪大全 可查询猫咪相关信息,包括品种介绍、产地、性格、寿命、价格等信息,带图片。 该产品拥有以下APIs: 1.关键字获取猫类 2.获取猫类列表 3.获取猫类详细信息 注意,该示例代码仅适用于https://www.doczj.com/doc/609453916.html,网站下API使用该产品前,您需要通过https://https://www.doczj.com/doc/609453916.html,/#/api/detail/?productID=193申请API服务 1.关键字获取猫类 package net.apishop.www.controller; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import https://www.doczj.com/doc/609453916.html,.HttpURLConnection; import https://www.doczj.com/doc/609453916.html,.MalformedURLException; import https://www.doczj.com/doc/609453916.html,.URL; import https://www.doczj.com/doc/609453916.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; /** * httpUrlConnection访问远程接口工具 */ public class Api { /** * 方法体说明:向远程接口发起请求,返回字节流类型结果 * param url 接口地址 * param requestMethod 请求方式 * param params 传递参数重点:参数值需要用Base64进行转码 * return InputStream 返回结果 */ public static InputStream httpRequestToStream(String url, String re questMethod, Map params) {

Jsoup解析HTML

jsoup 简介 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和扩展 HTMLParser 对自定义标签的处理能力。但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了jsoup 。 jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。 jsoup 的主要功能如下: 1. 从一个 URL,文件或字符串中解析 HTML; 2. 使用 DOM 或 CSS 选择器来查找、取出数据; 3. 可操作 HTML 元素、属性、文本; jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。 jsoup 的主要类层次结构如图 1 所示: 图 1. jsoup 的类层次结构 接下来我们专门针对几种常见的应用场景举例说明 jsoup 是如何优雅的进行HTML 文档处理的。 回页首

文档输入 jsoup 可以从包括字符串、URL 地址以及本地文件来加载 HTML 文档,并生成Document 对象实例。 下面是相关代码: 清单1 // 直接从字符串中输入 HTML 文档 String html = " 开源中国社区 " + " 这里是 jsoup 项目的相关文章 "; Document doc = Jsoup.parse(html); // 从 URL 直接加载 HTML 文档 Document doc = Jsoup.connect("https://www.doczj.com/doc/609453916.html,/").get(); String title = doc.title(); Document doc = Jsoup.connect("https://www.doczj.com/doc/609453916.html,/") .data("query", "Java") // 请求参数 .userAgent("I ’ m jsoup") // 设置 User-Agent .cookie("auth", "token") // 设置 cookie .timeout(3000) // 设置连接超时时间 .post(); // 使用 POST 方法访问 URL // 从文件中加载 HTML 文档 File input = new File("D:/test.html"); Document doc = Jsoup.parse(input,"UTF-8","https://www.doczj.com/doc/609453916.html,/"); 请大家注意最后一种 HTML 文档输入方式中的 parse 的第三个参数,为什么需要在这里指定一个网址呢(虽然可以不指定,如第一种方法)?因为 HTML 文档中会有很多例如链接、图片以及所引用的外部脚本、css 文件等,而第三个名为baseURL 的参数的意思就是当 HTML 文档使用相对路径方式引用外部文件时,jsoup 会自动为这些 URL 加上一个前缀,也就是这个 baseURL。 例如 开源软件 会被转换成 开源软件 。 回页首

WebApi系列~通过HttpClient来调用WebApi接口

回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。一Api接口参数的标准性 Get方式,可以有多个重载,有多个参数 POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递 Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象 标准接口如图 二调用方,参数的标准性 在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码

Get方式 $.ajax({ url: "http://localhost:52824/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); Post方式 $.ajax({ url: "http://localhost:52824/api/register", type: "POST", data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value success: function (data) { console.log("post:" + data); } }); 三在控制台中实现Get方式获取接口数据(只有异步实现) ///

/// HttpClient实现Get请求 /// static async void dooGet() { string url = "http://localhost:52824/api/register?id=1&leval=5"; //创建HttpClient(注意传入HttpClientHandler) var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; using (var http = new HttpClient(handler)) { //await异步等待回应 var response = await http.GetAsync(url);

网页数据抓取分析

1、抓取网页数据通过指定的URL,获得页面信息,进而对页面用DOM进行 NODE分析, 处理得到原始HTML数据,这样做的优势在于,处理某段数据的灵活性高,难点在节算法 需要优化,在页面HTML信息大时,算法不好,会影响处理效率。 2、htmlparser框架,对html页面处理的数据结构,HtmlParser采用了经典的Composite 模式,通过RemarkNode、TextNode、TagNode、AbstractNode和Tag来描述HTML页面 各元素。Htmlparser基本上能够满足垂直搜索引擎页面处理分析的需求,映射HTML标签,可方便获取标签内的HTML CODE。 Htmlparser官方介绍: htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。毫不夸张地说,htmlparser就是目前最好的html解析和分析 的工具。 3、nekohtml框架,nekohtml在容错性、性能等方面的口碑上比htmlparser好(包括htmlunit也用的是nekohtml),nokehtml类似XML解析原理,把html标签确析为dom, 对它们对应于DOM树中相应的元素进行处理。 NekoHTML官方介绍:NekoHTML是一个Java语言的HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析 器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。 NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元 素标签。NekoHTML的开发使用了Xerces Native Interface (XNI),后者是Xerces2的实现基础。由https://www.doczj.com/doc/609453916.html,/整理

java发送http的get、post请求

package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import https://www.doczj.com/doc/609453916.html,.URL; import https://www.doczj.com/doc/609453916.html,.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(

基于JAVA的新闻数据接口调用代码实例

基于JA V A的新闻数据接口调用代码实例 代码描述:基于JA V A的新闻数据接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.doczj.com/doc/609453916.html,.HttpURLConnection; import https://www.doczj.com/doc/609453916.html,.URL; import https://www.doczj.com/doc/609453916.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *新闻调用示例代码-聚合数据 *在线接口文档:https://www.doczj.com/doc/609453916.html,/docs/138 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.新闻检索 public static void getRequest1(){ String result =null; String url ="https://www.doczj.com/doc/609453916.html,/onebox/news/query";//请求接口地址 Map params = new HashMap();//请求参数 params.put("q","");//需要检索的关键字,请UTF8 URLENCODE params.put("key",APPKEY);//应用APPKEY(应用详细页查询)

Java实现发送Http请求

Java实现发送Http请求 JDK中提供了一些对无状态协议请求(HTTP)的支持: 首先让我们先构建一个请求类(HttpRequester)。 该类封装了JAVA实现简单请求的代码,如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import https://www.doczj.com/doc/609453916.html,.HttpURLConnection; import https://www.doczj.com/doc/609453916.html,.URL; import java.nio.charset.Charset; import java.util.Map; import java.util.Vector; /** * HTTP请求对象 * * @author YYmmiinngg */ public class HttpRequester { private String defaultContentEncoding; public HttpRequester() { this.defaultContentEncoding = Charset.defaultCharset().name(); }

/** * 发送GET请求 * * @param urlString * URL地址 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString) throws IOException { return this.send(urlString, "GET", null, null); } /** * 发送GET请求 * * @param urlString * URL地址 * @param params * 参数集合 * @return 响应对象 * @throws IOException

基于内容相似度的网页正文提取

—102 — 基于内容相似度的网页正文提取 王 利1,刘宗田1,王燕华2,廖 涛1 (1. 上海大学计算机科学与工程学院,上海 200072;2. 上海海洋大学信息学院,上海 201306) 摘 要:提出一种将复杂的网页脚本进行简化并映射成一棵易于操作的树型结构的方法。该方法不依赖于DOM 树,无须用HTMLparser 包进行解析,而是利用文本相似度计算方法,通过计算树节点中文本内容与各级标题的相似度判定小块文本信息的有用性,由此进行网页清洗与正文抽取,获得网页文本信息,实验结果表明,该方法对正文抽取具有较高的通用性与准确率。 关键词:网页正文抽取;网页映射;网页清洗;文本相似度 Web Page Main Text Extraction Based on Content Similarity WANG Li 1, LIU Zong-tian 1, WANG Yan-hua 2, LIAO Tao 1 (1. School of Computer Science and Engineering, Shanghai University, Shanghai 200072; 2. School of Information Technology, Shanghai Fisheries University, Shanghai 201306) 【Abstract 】This paper proposes a method of simplifying complex Web page script and mapping it into tree structure easy to operate. It does not depend on DOM tree, and does not need utilize htmlparser bag to parse. By calculating text similarity, it calculates the similarity between the content of tree node and headings of different levels to determine the usefulness of the text information, cleans the Web page and extracts the content information. Experimental results show that the method has better universal property and accuracy rate in main text extraction. 【Key words 】Web page main text extraction; Web page mapping; Web page cleaning; text similarity 计 算 机 工 程 Computer Engineering 第36卷 第6期 Vol.36 No.6 2010年3月 March 2010 ·软件技术与数据库· 文章编号:1000—3428(2010)06—0102—03 文献标识码:A 中图分类号:TP393 1 概述 随着Internet 的飞速发展,网络上的信息呈爆炸式增长。 网页己经成为Internet 上最重要的信息资源。各种网页为人们提供了大量可供借鉴或参考的信息,成为人们日常工作和生活必不可少的一部分。然而,网页上的信息经常包含大量的噪声,如广告链接、导航条、版权信息等非网页主题信息的内容,页面所要表达的主要信息经常被隐藏在无关的内容和结构中,限制了Web 信息的可利用性。本文主要对网页上的这些噪声进行滤除,并抽取网页正文信息,即网页清洗。它是Web 文本分类、聚类、文本摘要等文本信息处理的基础,网页正文抽取的效果直接影响到文本信息处理的效果。 本文的方法首先抽取出HTML 页面中的title 及各级标题,再对网页进行标准化预处理,然后建立一种新的树型结构,HTML 中的所有正文信息都包含在这棵树的节点中。利用这种树型结构可以方便地清洗网页中的噪声、抽取出网页中的正文信息。在抽取网页正文信息时,较大的文本块根据文本的长度极易抽取出,而对于只有小文本块的节点,由于页面中的title 及各级标题高度概括了该网页的主要内容,因此可以根据各节点内容与title 、各级标题的相似度来判定该节点的信息文本是否为有用文本,只要该小块文本与title 或某个子标题的相似度大于设定阈值,就判定其为有用信息。 2 相关工作 虽然网页正文提取是Web 文本挖掘中的一个重要问题, 但相关研究并不多。目前对网页进行噪声过滤与信息自动抽取的方法主要有两大类:(1)针对单一页面进行处理。根据所处理页面的内容特征、可视信息等应用一些启发性规则去除页面的噪音,抽取出页面内容。这类方法对每一个待处理的网页进行同样的处理,对于抽取通过模板产生的网页集效率较低。(2)针对同一站点中页面的一般模式进行处理。这种方法是基于一个或多个网站中的页面集进行模板检测的,但局限于由同一个模板生成的网页集,直接影响清洗的自适应性。 文献[1]的研究仅限于某些特定站点,在这些站点中根据合并不同页面生成的DOM 树来标记页面中哪些是有用信息哪些是噪声,并通过这些标记达到页面清洗的目的。文献[2]根据HTML 标签生成树,通过分析同一网站下网页之间模板的相似性来识别数据区域。文献[3]基于DOM 规范,提出了基于语义信息的STU-DOM 树模型,将HTML 文档转换为STU-DOM 树,并对其进行基于结构的过滤和基于语义的剪枝,完成了对网页主题信息的抽取。文献[4]采用基于标记窗的方法并利用Levenshtein Distance 公式计算标记窗中字符串与标题词之间的距离,从而判断该字符串是否为正文信息,该方法容易导致很多噪声无法滤除。 通过分析可知,现有的网页清洗方法大多基于DOM 树并用HTMLparser 程序包[5]对其进行解析,这种方法效率不高,而且依赖于第三方包。对此本文提出了一种简单的树型结构,在这棵树中保存了正文信息,同时消除了一些无用信息,并对各节点进行了简化,带来了操作上极大的便利。另外,在这棵树中可以通过深度搜索子节点来消除传统方法中不能处理网页正文部分被存放在多个td 中的情况以及不能处 基金项目:国家自然科学基金资助项目(60575035, 60975033);上海市重点学科建设基金资助项目(J50103);上海大学研究生创新基金资助项目(SHUCX092162) 作者简介:王 利(1984-),男,硕士研究生,主研方向:文本挖掘,事件本体;刘宗田,教授、博士生导师;王燕华,硕士研究生;廖 涛,博士研究生 收稿日期:2009-08-10 E-mail :wonglee07@https://www.doczj.com/doc/609453916.html,

python抓取网页数据的常见方法

https://www.doczj.com/doc/609453916.html, python抓取网页数据的常见方法 很多时候爬虫去抓取数据,其实更多是模拟的人操作,只不过面向网页,我们看到的是html在CSS样式辅助下呈现的样子,但爬虫面对的是带着各类标签的html。下面介绍python抓取网页数据的常见方法。 一、Urllib抓取网页数据 Urllib是python内置的HTTP请求库 包括以下模块:urllib.request 请求模块、urllib.error 异常处理模块、urllib.parse url解析模块、urllib.robotparser robots.txt解析模块urlopen 关于urllib.request.urlopen参数的介绍: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) url参数的使用 先写一个简单的例子:

https://www.doczj.com/doc/609453916.html, import urllib.request response = urllib.request.urlopen(' print(response.read().decode('utf-8')) urlopen一般常用的有三个参数,它的参数如下: urllib.requeset.urlopen(url,data,timeout) response.read()可以获取到网页的内容,如果没有read(),将返回如下内容 data参数的使用 上述的例子是通过请求百度的get请求获得百度,下面使用urllib的post请求 这里通过https://www.doczj.com/doc/609453916.html,/post网站演示(该网站可以作为练习使用urllib的一个站点使用,可以 模拟各种请求操作)。 import urllib.parse import urllib.request data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')

基于JAVA的健康新闻接口调用代码实例

基于JAVA的健康新闻接口调用代码实例 代码描述:基于JA V A的健康新闻接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.doczj.com/doc/609453916.html,.HttpURLConnection; import https://www.doczj.com/doc/609453916.html,.URL; import https://www.doczj.com/doc/609453916.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *健康资讯调用示例代码-聚合数据 *在线接口文档:https://www.doczj.com/doc/609453916.html,/docs/145 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.资讯分类列表 public static void getRequest1(){ String result =null; String url ="https://www.doczj.com/doc/609453916.html,/yi18/news/newsclass";//请求接口地址

Java网络编程(三)HttpUrlConnection与HttpClient详解(雷惊风)

HttpUrlConnection与HttpClient详解 一.概念。 在Android开发中,AndroidSDK中对HTTP提供了很好的支持,主要包括两种接口。 1.一个是Sun公司提供的库,基于标准Java接口的 HttpURLConnection,这个类封装的很少,如果使用高级功 能,如重访问/Cookie/Session等就相当不方便。它可以实现 简单的基于URL的请求与相应功能。Google在Android Api23及以后的版本中推荐使用HttpURLConnention,在后 续版本中逐渐对其进行优化完善。在2.2版本以前,一直存 在着一些bug。比如对一个可读的InputStream调用close 方法时,可能会导致连接池失效。通常我们会禁用连接池功 能。 2.另一个是Apache公司提供的的HttpClient,它提供了高效的, 最新的功能丰富的api,支持Http协议工具包,支持HTTP 最新版本和建议,是个很好的开源框架,封装了http的请求, 参数,内容体,响应等,拥有众多API,但同时HttpClient 的API数量太多,如果不破坏兼容性的情况下想对他进行扩 展很麻烦。在API 23 SDK将其去掉了。建议使用 HttpURLConnection。 以上两种联网方式都支持HTTPS协议、以流的形式进行传输、 IPv6、配置超时时间、以及连接池等功能。

二.区别。 1.功能上,HttpClient库要丰富很多,提供了很多工具,封装了http 的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。 2.H ttpClient高级功能代码写起来比较复杂,对开发人员的要求会高 一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。 3.HttpURLConnection在2.3版本增加了一些HTTPS方面的改进, 4.0版本增加一些响应的缓存。 4.HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但 要自己写代码处理。 5.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直 接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。 6.HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本 以上),加快了重复请求的速度。 7.HttpClient 适用于web browsers, 他们是可扩展的,并且拥有大 量的稳定APIs。但是,在不破坏其兼容性的前提下很难对如此多的APIs做修改。因此,Android 团队对修改优化Apache HTTP Client表现的并不积极。

python爬虫实战

python爬虫实战,多线程爬取京东jd html页面:无需登录的网 站的爬虫实战 2014-12-02 20:04:31 标签:网站爬虫python import 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 【前言】 【需求说明】 以京东为示例,爬取页面的,获取页面中得数据:记录到data.txt;获取页面中得图片,保存下来。 1、list的url如下 2、商品详情页的url如下: 【技术说明】

【代码逻辑说明】 1、run(获取最终要的结果) 2、parseListpageurl:返回list的总共的页面数量 3、judgelist:判断该list是否已经爬取完毕了,第一个list中的所有url、最后list 的所有url都爬取完毕了,那么久说明list的所有page爬取完毕了(实际上是一种弱校验) 4、getfinalurl_content:如果list没爬取完毕,每个list爬取,解析list中得每个html (判断html是否爬取过),获得内容和img 【坑说明】 1、需要设置超时时间,和重试,否则爬取一个url卡住的时候,整个线程都悲剧了。 2、有编码的坑,如果页面是gb2312的编码,需要转换为utf-8的编码: httprestmp.decode('gbk').encode('utf-8') 3、parser.feed的内容,如果存在一些特殊字符,可能需要替换,否则解析出来会莫名不对

4、图片保存,根据url获取前面两个数字,保存。以免一个目录下保存了过多的图片。【执行结果】 1、console输出 2、data.txt存储解析出来的内容 3、judegurl.txt(保存已经爬取过的url) 4、图片(下载的图片) 【代码详情】

java,http协议,接口

竭诚为您提供优质文档/双击可除java,http协议,接口 篇一:http接口 2.客户端:通过httpinvoker代理向服务器端发送请求,远程调用服务接口的方法 3.服务器端与客户端通信的数据需要序列化 配置服务器端和客户端的步骤 配置服务器端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.创建服务接口的具体实现类 4.公开服务 配置客户端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.访问服务 实例讲解

服务器端 1.服务接口:ucservice.java 它提供两项服务,查询用户信息和记录日志,如下: publicinterfaceucservice{ publicuserinfogetuserinfobyname(stringusername); publicintrecordlog(stringusername,stringpoint,strin goperate,stringdesc);} 说明:举这个列子是因为其比较有代表性,它将展示普通数据类型(int,long等)和复杂数据类型(dto等)的远程调用方式。userinfo是一个普通的dto,代码如下:publicclassuserinfoimplementsserializable{ privatestaticfinallongserialVersionuid=-69709675067 12260305l; /**用户名*/ privatestringusername; /**电子邮箱*/ privatestringemail; /**注册日期*/ privatedateregistdate; publicstringgetusername(){

VTS安装&使用说明

SUNvts的安装和使用1.概述 1.1什么是SUNvts Sunvts是sun Validation Test Suite的缩写。它是sun的一个全面的硬件测试工具,SUNvts通过校验sun平台上的设备和硬件控制器的连通性和功能性来检测硬件是否正常。 1.2SUNvts支持的测试※CD DVD Test(cddvdtest)※CPU Test(cputest)※Disk and Floppy Drives Test(disktest)※Data Translation Look-aside Buffer(dtlbtest)※Floating Point Unit Test(fputest)※Network Hardware Test(nettest)※Ethernet Loopback Test(netlbtest)※Physical Memory Test(pmemtest)※Serial Port Test(serialtest)※System Test(systest)※Universal Serial Board Test(usbtest)※Virtual Memory Test(vmemtest)注:SUNvts提供了GUI和tty两种模式来进行状态配置和环境的监测,具体会在后面的介绍中进行详细的描述。 2.安装SUNvts及补丁2.1安装SUNvts SUNvts包及相关文档的下载地址:[url]https://www.doczj.com/doc/609453916.html,/oem/products/vts/index.html[/url]。将下载的包ftp到主机中。本例中将SUNvts传到了/opt/sun下。(本例是以5.1版为例)root@nz86#cd/opt root@nz86#cd sun root@nz86#ls SUNVTS bin root@nz86#cd SUNVTS root@nz86#ls 5.1 root@nz86#cd 5.1 root@nz86#ls README SUNVTS_5.TGZ root@nz86#gunzip*.TGZ root@nz86#ls README SUNVTS_5.tar root@nz86#tar xf*.tar root@nz86#ls README SUNVTS_5.tar SunVTS-5.1 root@nz86#cd SunVTS* root@nz86#ls 8SUNWvts SUNWvtsmn SUNWvtsx sunvts5.1_new.html root@nz86#cd8

Java httpclient解决方案中的中文传递

Java httpclient解决方案中的中文传递(2009-03-05 17:21:33) 标签:杂谈 1 Commons HttpClient 开源项目简介 Http 协议是一种应用十分广泛的网络应用层协议。在Java 网络编程中我们会经常碰到Http 协议编程, 虽然JDK 提供了 HttpURLConnection 编程接口对Http 协议进行支持, 但是由于协议应用本身 的复杂性, 使得在大量实际项目单纯使用JDK 进行Http编程仍然相对比较困难。针对这种情况, 开源软件组织Apach 推出了HttpClient 开源组件, 并且提供稳定持续的升级版本, 因此在实际项目中采用HttpClient 组件进行Http 协议编程是一种高效经济的解决方案。 2 Commons HttpClient 中文环境下编程常见问题 由于HttpClient 组件设计的高度灵活性及易用性, 应用HttpClient 组件进行编程本身并不复杂。但是由于Java 编程环境自身容易出现字符编码问题, 衍生于Java 语言并主要由英语语系国家技术人员推出的HttpClient 组件自然在中文环境中会存在一定的编码问题, 同时由于部分Web 浏览器及Web 服务器并未严格实现标准Http 协议规范, 使得比较严格遵循标准Http 协议规范的 Http-Client 组件在与部分浏览器及服务器进行交互时会出现少量兼容性问题。笔者在中文环境下用HttpClinet 开发校外资源访问系统的过程中碰到系列HttpClient 技术问题, 经过测试查证找到相应的解决办法, 这对解决HttpClient 编程问题, 特别是中文环境下Http-Client 编程具有较大的借鉴 作用。( 注: 本文编程的HttpClient 组件版本为: Release 3.1 Beta 1) 3 Commons HttpClient 编程的典型问题及解决办法 3.1 URL 中文参数无法识别的问题 通常情况在Commons HttpClient 编程中我们用下列语句就可以向一个目标服务器提交一个Web 请求: HttpClient client=new HttpClient(); GetMethod method = new GetMethod (url);//本示例使用Get 方法, 当然也可使用Post 方法PostMethod method//=new PostMethod(url); client.executeMethod(method); InputStream receiver=method.getResponseBodyAsStream(); 如果URL 没有中文参数,以上语句执行起来没有任何问题,但是如果URL 中含有中文字符,中文参数将无法被Web 服务器识别, 程序虽然可以正常运行, 但却 无法得到正确结果。同时返回的Http 响应头, 如果含有中文字符也将出现乱码。分析源码发现, 这是HttpClient 中的HttpElementCharset 参数( 创建HTTP headers 的字符集) 的默认值为US- ASCII, ContentCharset 参数( 创建contentbody 的字符集) 的默认值为ISO- 8859- 1 的原故, 因此需要使用下列语句改变这些参数的默认值: client = new HttpClient(); params=client.getParams(); params.setHttpElementCharset("GBK"); params.setContentCharset("GBK"); 或者使用:

java程序请求Http请求,返回其网页源文件,xml 等都可以返回

package com.sun.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import https://www.doczj.com/doc/609453916.html,.MalformedURLException; import https://www.doczj.com/doc/609453916.html,.URL; import javax.swing.JFrame; public class Resol extends JFrame { // 读取url对象所引用的web页 public void readPage(URL url) { BufferedReader reader = null; String line; StringBuffer str = new StringBuffer(); try { // 获取url输入流 reader = new BufferedReader(new InputStreamReader(url.openStream())); // 读取一行,并添加至tPage中 while ((line = reader.readLine()) != null) str.append(line); } catch (IOException ie) { } finally { try { if (reader != null) reader.close(); } catch (Exception e) { } } System.out.println(str.toString()); } public static void main(String[] args) { Resol me = new Resol(); try { me.readPage(new URL("https://www.doczj.com/doc/609453916.html,")); } catch (MalformedURLException e) { e.printStackTrace(); } } }

相关主题
文本预览
相关文档 最新文档