文档库 最新最全的文档下载
当前位置:文档库 › 使用HttpGet和HttpPost访问HTTP资源

使用HttpGet和HttpPost访问HTTP资源

使用HttpGet和HttpPost访问HTTP资源

使用HttpGet和HttpPost访问HTTP资源

需求:用户登录(name:用户名,pwd:密码)

(一)HttpGet :doGet()方法

//doGet():将参数的键值对附加在url后面来传递

public String getResultForHttpGet(String name,String pwd) throws ClientProtocolException, IOException{

//服务器:服务器项目:servlet名称

String path="http://192.168.5.21:8080/test/test";

String uri=path+"?name="+name+"&pwd="+pwd;

//name:服务器端的用户名,pwd:服务器端的密码

//注意字符串连接时不能带空格

String result="";

HttpGet httpGet=new HttpGet(uri);

HttpResponse response=new DefaultHttpClient().execute(httpGet);

if(response.getStatusLine().getStatusCode()==200){

HttpEntity entity=response.getEntity();

result=EntityUtils.toString(entity, HTTP.UTF_8);

}

return result;

}

(二)HttpPost :doPost()方法

//doPost():将参数打包到http报头中传递

public String getReultForHttpPost(String name,String pwd) throws ClientProtocolException, IOException{

//服务器:服务器项目:servlet名称

String path="http://192.168.5.21:8080/test/test";

HttpPost httpPost=new HttpPost(path);

Listlist=new ArrayList();

list.add(new BasicNameValuePair("name", name));

list.add(new BasicNameValuePair("pwd", pwd));

httpPost.setEntity(new UrlEncodedFormEntity(list,HTTP.UTF_8));

String result="";

HttpResponse response=new DefaultHttpClient().execute(httpPost);

if(response.getStatusLine().getStatusCode()==200){

HttpEntity entity=response.getEntity();

result=EntityUtils.toString(entity, HTTP.UTF_8);

}

return result;

}

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);

HTTP请求报头详解

HTTP头字段包括4类: general-header ; request-header ; response-header ; entity-header . ********************************************************************* ********** General Header Fields ============================= general header是request、response都可用的, 但是不能用于entity. --Cache-Control --Connection --Date --Pragma --Trailer --Transfer-Encoding --Upgrade --Via --Warning ********************************************************************* ********** Request Header Fields ====================== request-header fields 允许客户端传递关于request和客户端的附加信息到服务端, --Accept --Accept-Charset --Accept-Encoding --Accept-Language --Authorization --Expect --From --Host --If-Match --If-Modified-Since --If-None-Match --If-Range --If-Unmodified-Since

JAVA-用HttpClient来模拟浏览器GET,POST

一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面,这过程就需要自行处理cookie,想想当你用https://www.wendangku.net/doc/1f4233503.html,.HttpURLConnection来完成这些功能时是多么恐怖的事情啊!况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的“顽固”!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了! 我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用https://www.wendangku.net/doc/1f4233503.html,.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakarta的commons项目,目前的版本是2.0RC2。commons下本来已经有一个net的子项目,但是又把httpclient单独提出来,可见http 服务器的访问绝非易事。 Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS 的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所有问题。 1.读取网页(HTTP/HTTPS)内容 下面是我们给出的一个简单的例子用来访问某个页面 /* * Created on 2003-12-14 by Liudong */ package http.demo; import java.io.IOException; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.*; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.*; /** * 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面 * @author Liudong

http协议请求响应报文格式及状态码详解

HTTP协议报文格式 HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB 服务器端访问页面的过程和HTTP协议报文的格式。 基于HTTP协议的客户机访问包括4个过程,分别是建立TCP套接字连接、发送HTTP请求报文、接收HTTP应答报文和关闭TCP套接字连接: 1. 创建TCP套接字连接 客户端与WEB服务器创建TCP套接字连接,其中WEB端服务器的地址可以通过域名解析确定,WEB端的套接字侦听端口一般是80。 2. 发送HTTP请求报文 客户端向WEB服务端发送请求报文,HTTP协议的请求报文格式为: 请求消息= 请求行(实体头信息)CRLF[实体内容] 请求行= 方法URL HTTP版本号CRLF 方法= GET|HEAD|POST|扩展方法 URL = 协议名称+宿主名+目录与文件名 其中"CRLF"表示回车换行。 "请求行"中的"方法"描述了对指定资源执行的动作,常用的方法"GET"、"HEAD"和"POST"等3种,它们的含义如表15-8所示: 请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。 (1)请求行 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。 HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。 GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾 与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。 表15-8 HTTP请求方法

经典教程httpClient4

目录 HttpClient简介 (4) 1)百科名片: (4) 2)HttpClient 的范围 (4) 3)httpClient 特性 (4) HttpClient基本功能的使用 (6) a)环境准备 (6) b)几个主要类解释 (6) c)第一个程序 (6) d)如何传递参数 (8) e)模拟表单登录 (10) f)HttpClient连接SSL (12) 1)生成KeyStore (12) 2)配置tomcat服务器支持SSL (13) 3)用浏览器访问你的应用 (15) 4)用httpClient访问https (15)

HttpClient简介 1)百科名片: HTTP 协议可能是现在Internet 上使用得最多、最重要的协议了,越来越多的Java 应用程序需要直接通过HTTP 协议来访问网络资源。虽然在JDK 的java net包中已经提供了访问HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如Apache Jakarta 上很著名的另外两个开源项目Cactus 和HTMLUnit 都使用了HttpClient。现在HttpClient最新版本为HttpClient 4.1. 2)HttpClient 的范围 ?基于HttpCore的客户端HTTP运输实现库 ?基于经典(阻塞)I/O ?内容无关 3)httpClient 特性 ?基于标准,纯净的java语言.实现了Http1.0和Http1.1 ?以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE). ?支持HTTPS协议. ?通过Http代理建立透明的连接. ?利用CONNECT 方法通过Http代理建立隧道的https连接. ?Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案. ?插件式的自定义认证方案. ?便携可靠的套接字工厂使它更容易的使用第三方解决方案. ?连接管理器支持多线程应用.支持设置最大连接数,同时支持设置每个主机的最大连接数.发现并关闭过期的连接. ?Automatic Cookie handling for reading Set-Cookie: headers from the server and sending them back out in a Cookie: header when appropriate. ?插件式的自定义Cookie策略. ?Request output streams to avoid buffering any content body by streaming directly to the socket to the server.

HTTPClient用法

HttpClient的用法 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过HTTP 协议来访问网络资源。 Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给 httpclient替你完成。 首先,我们必须安装好 HttpClient。 HttpClient 可以在https://www.wendangku.net/doc/1f4233503.html,/commons/httpclient/downloads.html下载. HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址 https://www.wendangku.net/doc/1f4233503.html,/site/downloads /downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中. HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址 https://www.wendangku.net/doc/1f4233503.html,/site/downloads /downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中 1.读取网页(HTTP/HTTPS)内容 下面是我们给出的一个简单的例子用来访问某个页面 package http.demo; import java.io.IOException; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.*; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.*; /** * 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面

http协议交互过程

竭诚为您提供优质文档/双击可除 http协议交互过程 篇一:wireshake抓包分析tcp与http过程详解 http协议报文格式详解 在我们日常生活中最常见的应用环境就是上网浏览网页,很多上班族到办公室的第一件事就是打开电脑,而开机后的第一件事就是打开ie、Firefox、myie、greenbrowser、opera等浏览器时,做的第一件事就是浏览一下例如.cn,的新闻,而这种简单的应用操作,完成的交互过程就是一个典型的http协议的应用过程。 http是基于tcp的连接,因此,建立http连接必须经过tcp的过程,tcp的建立过程是3次握手的过程。然后就是http过程,http只有两种报文,请求和应答报文。完成http过程后,3次断开tcp连接。 http tcp的第一阶段 http开始之前先3次握手,第一阶段就是客户向服务器发送同步请求,flag字段的syn位置1。 第二阶段

第二阶段就是服务器向客户回复一个ack包,其中Flag 字段的syn位和ack字段置1。 tcp的第三阶段: tcp的第三阶段是客户向服务器发送ack,至此,tcp的3次握手结束 tcp三次握手结束之后就是http请求 客户发出http请求之后,服务器收到请求发送ack: 服务器发送应答报文 篇二:http协议分析报告实例 http协议分析 1实验目的 分析http协议报文首部格式,理解http协议工作过程2实验内容 截获http报文,分析http协议报文首部格式,学习http 协议工作过程。3实验原理 超文本传送协议http(hypertexttransferprotocol),是万维网客户程序与万维网服务器程序之间的交互所要严 格遵守的协议。http是一个应用层协议,它使用tcp连接进行可靠的传送。对于万维网站点的访问要使用的http协议。 http的uRl的一般形式是:http://:/ www采用b/s结构,客户使用浏览器在uRl栏中输入http 请求,即输入对方服务器的地址,向web服务器提出请求。

HttpClient学习

HttpClient 学习笔记 笔记一: 1、HttpClient的功能 1.基于标准,纯正java,实现了http1.0和1.1。 2.在一个可扩展的OO框架内,实现了HTTP的全部方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE) 3.支持HTTPS(ssl上的HTTP)的加密操作 4.透明地穿过HTTP代理建立连接 5.通过CONNECT方法,利用通过建立穿过HTTP代理的HTTPS连接 6.利用本地Java socket,透明地穿过SOCKS(版本5和4)代理建立连接 7.支持利用Basic、Digest和NTLM加密的认证 8.支持用于上传大文件的Multi-Part表单POST方法 9.插件式安全socket实现,易于使用第三方的解决方案 10.连接管理,支持多线程应用,支持设定单个主机总连接和最高连接数量,自动检测和 关闭失效连接 11.直接将请求信息流送到服务器的端口 12.直接读取从服务器的端口送出的应答信息 13.支持HTTP/1.0中用KeepAlive和HTTP/1.1中用persistance设置的持久连接 14.直接访问由服务器送出的应答代码和头部信息 15.可设置连接超时时间 16. 17.HttpMethods 实现Command Pattern,以允许并行请求或高效连接复用 18.遵循the Apache Software License协议,源码免费可得

2、预备工作 对jre1.3.*,如果要HttpClient支持https,则需要下载并安装jsse和jce.安装的步骤如下: 1)下载jsse和jce. 2)检查CLASSPA TH中没有与jsse和jce相关的jar包 3)将US_export_policy.jar、local_policy.jar、jsse.jar、jnet.jar、jce1_2_x.jar、sunjce_provider.jar、jcert.jar复制到目录: UNIX:$JDK_HOME/jre/lib/ext Windows:%JDK_HOME%\jre\lib\ext 4)修改下述目录下的java.security文件。 UNIX:$JDK_HOME/jre/lib/security/ Windows:%JDK_HOME%\jre\lib\security\ 5) 将 # # List of providers and their preference orders: # security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.rsajca.Provider 改为: # # List of providers and their preference orders: # security.provider.1=com.sun.crypto.provider.SunJCE security.provider.2=sun.security.provider.Sun security.provider.3=com.sun.rsajca.Provider security.provider.4=https://www.wendangku.net/doc/1f4233503.html,.ssl.internal.ssl.Provider HttpClient还要求安装commons-logging,下面跟httpclient一块安装。 3、取得源码 cvs -d :pserver:anoncvs@https://www.wendangku.net/doc/1f4233503.html,:/home/cvspublic login password: anoncvs cvs -d :pserver:anoncvs@https://www.wendangku.net/doc/1f4233503.html,:/home/cvspublic checkout jakarta-commons/logging cvs -d :pserver:anoncvs@https://www.wendangku.net/doc/1f4233503.html,:/home/cvspublic checkout jakarta-commons/httpclient 编译: cd jakarta-commons/logging ant dist cp dis/*.jar ../httpclient/lib/ cd ../httpclient

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表现的并不积极。

http请求处理流程(讲的很清楚)

.NET平台处理HTTP请求 .NET平台处理HTTP请求的过程大致如下: 1、IIS得到一个请求;,。 2、查询脚本映射扩展,然后把请求映射到文件 3、代码进入工作者进程(IIS5里是;IIS6里是,工作者进程也叫辅助进程; 4、 .NET运行时被加载; 5、非托管代码调用()方法; 6、每一个请求调用一个IsapiWorkerRequest; 7、使用WorkerRequest调用()方法; 8、通过传递进来的WorkerRequest创建一个HttpContext对象 9、通过把上下文对象作为参数传递给(),然后调用该方法,从应用程序池中获取一个HttpApplication实例; 10、调用(),启动管道事件序列,钩住模块和处理器; 11、调用,开始处理请求; 12、触发管道事件; 13、调用HTTP处理器和ProcessRequest方法; 14、把返回的数据输出到管道,触发处理请求后的事件。 当客户端向Web服务器请求一个页面文件时,这个HTTP请求会被进程截获(WWW服务),它判断文件后缀,如果是*.aspx、*.asmx等,就把这个请求转交给,而则会通过一个Http PipeLine的管道,将这个HTTP请求发送给进程,当这个HTTP请求进入进程之后, framework就会通过HttpRuntime来处理这个HTTP 请求,处理完毕后将结果返回给客户端。 当一个HTTP请求被送入到HttpRuntime之后,这个HTTP请求通过HTTP管道(HttpRuntime是HTTP管道的入口)被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的HTTP请求,同时HttpApplication实例会创建一个HttpContext对象来记录HTTP请求的上下文,而后这个HTTP请求会依次进入到如下几个容器中:HttpModule --> HttpHandler Factory --> HttpHandler当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了。 如果想在中途截获一个HttpRequest并做些自己的处理,就应该在HttpRuntime运行时内部来做到这一点,确切的说时在HttpModule这个容器中做到这个的。 过程详解: 从本质上讲,主要是由一系列的类组成,这些类的主要目的就是将Http请求转变为对客户端的响应。HttpRuntime类是的一个主要入口,它有一个ProcessRequest方法,这个方法以一个 HttpWorkerRequest 类作为参数。HttpRuntime类几乎包含着关于单个Http请求的所有信息:所请求的文件、服务器端变量、QueryString、Http头信息等等。使用这些信息来加载、运行正确的文件,并且将这个请求转换到输出流中,一般来说,就是HTML页面;二般来说,也可以是张图片^_^。

HttpClient 简介

HttpClient简介 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。本文首先介绍HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。HTTP 协议可能是现在Internet 上使用得最多、最重要的协议了,越来越多的Java 应用程序需要直接通过HTTP 协议来访问网络资源。虽然在JDK 的https://www.wendangku.net/doc/1f4233503.html, 包中已经提供了访问HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如Apache Jakarta 上很著名的另外两个开源项目Cactus 和HTMLUnit 都使用了HttpClient。现在HttpClient最新版本为HttpClient 4.0-beta2 2.HttpClient 功能介绍 以下列出的是HttpClient 提供的主要的功能,要知道更多详细的功能可以参见HttpClient 的主页。 (1)实现了所有HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自动转向 (3)支持HTTPS 协议 (4)支持代理服务器等 3.HttpClient 基本功能的使用 (1) GET方法 使用HttpClient 需要以下6 个步骤:

http请求响应过程

http请求与响应过程 (1)请求方法URI协议/版本 请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1 以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。 根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1目前支持7种请求方法:GET、POST、HEAD、OPTIONS、 PUT、DELETE和TARCE。 GET 请求获取由Request-URI所标识的资源。 POST 在Request-URI所标识的资源后附加新的数据。 HEAD 请求获取由Request-URI所标识的资源的响应消息报头。 OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。 PUT 请求服务器存储一个资源,并用Request-URI作为其标识。 DELETE 请求服务器删除由Request-URI所标识的资源。 TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。 在Internet应用中,最常用的方法是GET和POST。 URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最 后,协议版本声明了通信过程中使用HTTP的版本。 (2)服务器响应状态码 状态代码: 状态代码由3位数字组成,表示请求是否被理解或被满足。 状态描述: 状态描述给出了关于状态代码的简短的文字描述。 状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。 第一个数字有五种可能的取值: - 1xx: 指示信息—表示请求已接收,继续处理。 - 2xx: 成功—表示请求已经被成功接收、理解、接受。 - 3xx: 重定向—要完成请求必须进行更进一步的操作。 - 4xx: 客户端错误—请求有语法错误或请求无法实现。 - 5xx: 服务器端错误—服务器未能实现合法的请求。 状态代码状态描述说明 200 OK --客户端请求成功 400 Bad Request --由于客户端请求有语法错误,不能被服务器所理解。 401 Unauthonzed --请求未经授权,请求身份认证。这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden --服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因

httpClient远程调用webService

我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种: 1、通过浏览器HTTP调用,返回规范的XML文件内容 2、通过客户端程序调用,返回结果可自定义格式 接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例 步骤如下: 准备工作:用到的jar包有:下载链接 (https://www.wendangku.net/doc/1f4233503.html,/detail/lanxuezaipiao/5354480) 第一步:新建Java Project,项目名称为HttpCallWebService 第二步:将所需jar包导入到库中 第三步:编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST 方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式:静态和动态构造,下面分别介绍这两种方式: 注:这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改。静态构造请求数据: package com.http; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.HttpClient; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.HttpException; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.InputStreamRequestEntity; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.PostMethod; import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.RequestEntity; public class StaticHttpclientCall { /** * @param args * @throws IOException * @throws HttpException */ public static void main(String[] args) throws HttpException, IOException { // TODO Auto-generated method stub

httpclientorg.apache.http.nohttpresponseexceptionhost端口failedtorespond错误原因和解决方法

httpclient org.apache.http.NoHttpResponseException host 端口failed to respond 错误原因和解决方法 import com.google.api.client.http.ByteArrayContent; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpBackOffUnsuccessfulRespo nseHandler; import com.google.api.client.http.HttpContent; import com.google.api.client.http.HttpHeaders; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestFactory; import com.google.api.client.http.HttpResponse; import com.google.api.client.http.HttpStatusCodes; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.apache.ApacheHttpTransport; import com.google.api.client.util.BackOff; import java.io.IOException; import java.io.InputStream; import https://www.wendangku.net/doc/1f4233503.html,.ProxySelector; import java.util.Map;

comons_httpClient教程

comons_httpClient教程 Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。 1.读取网页(HTTP/HTTPS)内容 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面 Java代码 1.package http.demo; 2. 3.import java.io.IOException; 4.import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.*; 5.import https://www.wendangku.net/doc/1f4233503.html,mons.httpclient.methods.*; 6. 7.public class SimpleClient { 8. 9. public static void main(String[] args) throws IOException 10. { 11. HttpClient client = new HttpClient(); 12. 13. //设置代理服务器地址和端口 14. 15. //client.getHostConfiguration().setProxy("proxy_host_ad dr",proxy_port); 16. 17. //使用GET方法,如果服务器需要通过HTTPS连接,那只需要将 下面URL中的http换成https 18. 19. HttpMethod method = new GetMethod("https://www.wendangku.net/doc/1f4233503.html," ); 20. 21. //使用POST方法 22. 23. //HttpMethod method = new PostMethod("http://java.sun.c om"); 24. 25. client.executeMethod(method); 26. 27. //打印服务器返回的状态

有关http请求返回值的说明

2xx 成功 200 正常;请求已完成。 201 正常;紧接 POST 命令。 202 正常;已接受用于处理,但处理尚未完成。 203 正常;部分信息—返回的信息只是一部分。 204 正常;无响应—已接收请求,但不存在要回送的信息。 3xx 重定向 301 已移动—请求的数据具有新的位置且更改是永久的。 302 已找到—请求的数据临时具有不同 URI。 303 请参阅其它—可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。 304 未修改—未按预期修改文档。 305 使用代理—必须通过位置字段中提供的代理来访问请求的资源。 306 未使用—不再使用;保留此代码以便将来使用。 4xx 客户机中出现的错误 400 错误请求—请求中有语法问题,或不能满足请求。 401 未授权—未授权客户机访问数据。 402 需要付款—表示计费系统已有效。 403 禁止—即使有授权也不需要访问。 404 找不到—服务器找不到给定的资源;文档不存在。 407 代理认证请求—客户机首先必须使用代理认证自身。 410 请求的网页不存在(永久); 415 介质类型不受支持—服务器拒绝服务请求,因为不支持请求实体的格式。 5xx 服务器中出现的错误 500 内部错误—因为意外情况,服务器不能完成请求。 501 未执行—服务器不支持请求的工具。 502 错误网关—服务器接收到来自上游服务器的无效响应。 503 无法获得服务—由于临时过载或维护,服务器无法处理请求。 100系列码 从100到199范围的HTTP状态码是信息报告码。基于各种原因考虑,大多数情况下我们是很少看见这些代码的。首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏幕上。它们只是浏览器使引用的内部码。另外,这些代码不常见的另外一个原因是起初HTTP标准不允许使用这一范围的状态码。就其本身而言,它们也一直没有被广泛地使用。 200系列码 从 200到299范围的状态码是操作成功代码。同样的,在正常的Web上网中,你也很可能不曾在屏幕上看到这些代码。相反的,这些代码是在浏览器内部使用的,用以确认操作成功确认和当前请求状态。虽然这些代码通常不显示,但是有一些故障排除工具能够读到它们,就像和其它大多数的HTTP状态码一样,它们在错误诊断过程中是非常有用的。

HttpClient 4 实现文件下载

有时需要通过httpclient进行文件下载,下面是文件下载的实现过程 Java代码 1.import java.io.File; 2.import java.io.FileOutputStream; 3.import java.io.IOException; 4.import java.io.InputStream; 5. 6.import org.apache.http.HttpEntity; 7.import org.apache.http.HttpHost; 8.import org.apache.http.HttpResponse; 9.import org.apache.http.HttpStatus; 10.import org.apache.http.client.ClientProtocolException; 11.import org.apache.http.client.HttpClient; 12.import org.apache.http.client.methods.HttpGet; 13.import org.apache.http.impl.client.DefaultHttpClient; 14. 15.public class SearchDomain { 16. 17.public static void main(String[] args) throws ClientProtocolException, IOException { 18.//实例化一个HttpClient 19.HttpClient httpClient = new DefaultHttpClient(); 20.//设定目标站点web的默认端口80可以不写的当然如果是其它端口就要标明 21.HttpHost httpHost = new HttpHost("https://www.wendangku.net/doc/1f4233503.html,",80); 22.//设置需要下载的文件 23.HttpGet httpGet = new HttpGet("/test.zip"); 24.//这里也可以直接使用httpGet的绝对地址,当然如果不是具体地址不要忘记/结尾 25.//HttpGet httpGet = new HttpGet("https://www.wendangku.net/doc/1f4233503.html,/"); 26.//HttpResponse response = httpClient.execute(httpGet); 27. 28.HttpResponse response = httpClient.execute(httpHost, httpGet); 29.if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ 30.//请求成功 31.//取得请求内容 32.HttpEntity entity = response.getEntity(); 33. 34.//显示内容 35.if (entity != null) { 36.//这里可以得到文件的类型如image/jpg /zip /tiff 等等但是发现并不是十分有效, 有时明明后缀是.rar但是取到的是null,这点特别说明 37.System.out.println(entity.getContentType()); 38.//可以判断是否是文件数据流

相关文档