- 浏览: 75194 次
- 性别:
- 来自: 富安
最新评论
-
simpledev:
...
10步让你成为更优秀的程序员 -
bavnnsym:
像三楼说的那样,,是可以的,,我之前也碰到这个问题,,也是在d ...
IE6层不能遮挡住下拉框问题解决 -
suko:
yukaizhao 写道一句话的事情,就是创建一个和层一样大小 ...
IE6层不能遮挡住下拉框问题解决 -
yukaizhao:
一句话的事情,就是创建一个和层一样大小,一样位置的iframe ...
IE6层不能遮挡住下拉框问题解决 -
kaipingk:
andyyehoo 写道可以参考一下Struts2的日历控件的 ...
IE6层不能遮挡住下拉框问题解决
HTTP请求如何带参
转载自:http://www.cnblogs.com/xirihanlin/archive/2011/12/05/2276772.html,谢谢作者分享
这两天正好作一份API的接口文档,关于HTTP request如何传递参数不是很清楚,这里转载了他人的文档,让我明白了很多。。
http://tomfish88.iteye.com/category/138221?show_full=true
----------------
HttpClient程序包是一个实现了 HTTP 协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。一个最简单的调用如下:
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
public static void main(String[] args) {
// 核心应用类
HttpClient httpClient = new DefaultHttpClient();
// HTTP请求
HttpUriRequest request =
new HttpGet("http://localhost/index.html");
// 打印请求信息
System.out.println(request.getRequestLine());
try {
// 发送请求,返回响应
HttpResponse response = httpClient.execute(request);
// 打印响应信息
System.out.println(response.getStatusLine());
} catch (ClientProtocolException e) {
// 协议错误
e.printStackTrace();
} catch (IOException e) {
// 网络异常
e.printStackTrace();
}
}
}
如果HTTP服务器正常并且存在相应的服务,则上例会打印出两行结果:
GET http://localhost/index.html HTTP/1.1
HTTP/1.1 200 OK
核心对象httpClient的调用非常直观,其execute方法传入一个request对象,返回一个response对象。使用 httpClient发出HTTP请求时,系统可能抛出两种异常,分别是ClientProtocolException和IOException。第一种异常的发生通常是协议错误导致,如在构造HttpGet对象时传入的协议不对(例如不小心将”http”写成”htp”),或者服务器端返回的内容不符合HTTP协议要求等;第二种异常一般是由于网络原因引起的异常,如HTTP服务器未启动等。
从实际应用的角度看,HTTP协议由两大部分组成:HTTP请求和HTTP响应。那么HttpClient程序包是如何实现HTTP客户端应用的呢?实现过程中需要注意哪些问题呢?
HTTP请求
HTTP 1.1由以下几种请求组成:GET, HEAD, POST, PUT, DELETE, TRACE and OPTIONS, 程序包中分别用HttpGet, HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, and HttpOptions 这几个类创建请求。所有的这些类均实现了HttpUriRequest接口,故可以作为execute的执行参数使用。
所有请求中最常用的是GET与POST两种请求,与创建GET请求的方法相同,可以用如下方法创建一个POST请求:
HttpUriRequest request = new HttpPost(
"http://localhost/index.html");
HTTP请求格式告诉我们,有两个位置或者说两种方式可以为request提供参数:request-line方式与request-body方式。
request-line
request-line方式是指在请求行上通过URI直接提供参数。
(1)
我们可以在生成request对象时提供带参数的URI,如:
HttpUriRequest request = new HttpGet(
"http://localhost/index.html?param1=value1¶m2=value2");
(2)
另外,HttpClient程序包为我们提供了URIUtils工具类,可以通过它生成带参数的URI,如:
URI uri = URIUtils.createURI("http", "localhost", -1, "/index.html",
"param1=value1¶m2=value2", null);
HttpUriRequest request = new HttpGet(uri);
System.out.println(request.getURI());
上例的打印结果如下:
http://localhost/index.html?param1=value1¶m2=value2
(3)
需要注意的是,如果参数中含有中文,需将参数进行URLEncoding处理,如:
String param = "param1=" + URLEncoder.encode("中国", "UTF-8") + "¶m2=value2";
URI uri = URIUtils.createURI("http", "localhost", 8080,
"/sshsky/index.html", param, null);
System.out.println(uri);
上例的打印结果如下:
http://localhost/index.html?param1=%E4%B8%AD%E5%9B%BD¶m2=value2
(4)
对于参数的URLEncoding处理,HttpClient程序包为我们准备了另一个工具类:URLEncodedUtils。通过它,我们可以直观的(但是比较复杂)生成URI,如:
List params = new ArrayList();
params.add(new BasicNameValuePair("param1", "中国"));
params.add(new BasicNameValuePair("param2", "value2"));
String param = URLEncodedUtils.format(params, "UTF-8");
URI uri = URIUtils.createURI("http", "localhost", 8080,
"/sshsky/index.html", param, null);
System.out.println(uri);
上例的打印结果如下:
http://localhost/index.html?param1=%E4%B8%AD%E5%9B%BD¶m2=value2
request-body
与request-line方式不同,request-body方式是在request-body中提供参数,此方式只能用于POST请求。在 HttpClient程序包中有两个类可以完成此项工作,它们分别是UrlEncodedFormEntity类与MultipartEntity类。这两个类均实现了HttpEntity接口。
(1)
使用最多的是UrlEncodedFormEntity类。通过该类创建的对象可以模拟传统的HTML表单传送POST请求中的参数。如下面的表单:
<form action="http://localhost/index.html" method="POST">
<input type="text" name="param1" value="中国"/>
<input type="text" name="param2" value="value2"/>
<inupt type="submit" value="submit"/>
</form>
我们可以用下面的代码实现:
List formParams = new ArrayList();
formParams.add(new BasicNameValuePair("param1", "中国"));
formParams.add(new BasicNameValuePair("param2", "value2"));
HttpEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
HttpPost request = new HttpPost(“http://localhost/index.html”);
request.setEntity(entity);
当然,如果想查看HTTP数据格式,可以通过HttpEntity对象的各种方法取得。如:
List formParams = new ArrayList();
formParams.add(new BasicNameValuePair("param1", "中国"));
formParams.add(new BasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
System.out.println(entity.getContentType());
System.out.println(entity.getContentLength());
System.out.println(EntityUtils.getContentCharSet(entity));
System.out.println(EntityUtils.toString(entity));
上例的打印结果如下:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
39
UTF-8
param1=%E4%B8%AD%E5%9B%BD¶m2=value2
(2)
除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为 multipart/form-data。在HttpClient程序扩展包(HttpMime)中专门有一个类与之对应,那就是 MultipartEntity类。此类同样实现了HttpEntity接口。如下面的表单:
<form action="http://localhost/index.html" method="POST"
enctype="multipart/form-data">
<input type="text" name="param1" value="中国"/>
<input type="text" name="param2" value="value2"/>
<input type="file" name="param3"/>
<inupt type="submit" value="submit"/>
</form>
我们可以用下面的代码实现:
MultipartEntity entity = new MultipartEntity();
entity.addPart("param1", new StringBody("中国", Charset.forName("UTF-8")));
entity.addPart("param2", new StringBody("value2", Charset.forName("UTF-8")));
entity.addPart("param3", new FileBody(new File("C:\\1.txt")));
HttpPost request = new HttpPost(“http://localhost/index.html”);
request.setEntity(entity);
转载自:http://www.cnblogs.com/xirihanlin/archive/2011/12/05/2276772.html,谢谢作者分享
这两天正好作一份API的接口文档,关于HTTP request如何传递参数不是很清楚,这里转载了他人的文档,让我明白了很多。。
http://tomfish88.iteye.com/category/138221?show_full=true
----------------
HttpClient程序包是一个实现了 HTTP 协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。一个最简单的调用如下:
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
public static void main(String[] args) {
// 核心应用类
HttpClient httpClient = new DefaultHttpClient();
// HTTP请求
HttpUriRequest request =
new HttpGet("http://localhost/index.html");
// 打印请求信息
System.out.println(request.getRequestLine());
try {
// 发送请求,返回响应
HttpResponse response = httpClient.execute(request);
// 打印响应信息
System.out.println(response.getStatusLine());
} catch (ClientProtocolException e) {
// 协议错误
e.printStackTrace();
} catch (IOException e) {
// 网络异常
e.printStackTrace();
}
}
}
如果HTTP服务器正常并且存在相应的服务,则上例会打印出两行结果:
GET http://localhost/index.html HTTP/1.1
HTTP/1.1 200 OK
核心对象httpClient的调用非常直观,其execute方法传入一个request对象,返回一个response对象。使用 httpClient发出HTTP请求时,系统可能抛出两种异常,分别是ClientProtocolException和IOException。第一种异常的发生通常是协议错误导致,如在构造HttpGet对象时传入的协议不对(例如不小心将”http”写成”htp”),或者服务器端返回的内容不符合HTTP协议要求等;第二种异常一般是由于网络原因引起的异常,如HTTP服务器未启动等。
从实际应用的角度看,HTTP协议由两大部分组成:HTTP请求和HTTP响应。那么HttpClient程序包是如何实现HTTP客户端应用的呢?实现过程中需要注意哪些问题呢?
HTTP请求
HTTP 1.1由以下几种请求组成:GET, HEAD, POST, PUT, DELETE, TRACE and OPTIONS, 程序包中分别用HttpGet, HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, and HttpOptions 这几个类创建请求。所有的这些类均实现了HttpUriRequest接口,故可以作为execute的执行参数使用。
所有请求中最常用的是GET与POST两种请求,与创建GET请求的方法相同,可以用如下方法创建一个POST请求:
HttpUriRequest request = new HttpPost(
"http://localhost/index.html");
HTTP请求格式告诉我们,有两个位置或者说两种方式可以为request提供参数:request-line方式与request-body方式。
request-line
request-line方式是指在请求行上通过URI直接提供参数。
(1)
我们可以在生成request对象时提供带参数的URI,如:
HttpUriRequest request = new HttpGet(
"http://localhost/index.html?param1=value1¶m2=value2");
(2)
另外,HttpClient程序包为我们提供了URIUtils工具类,可以通过它生成带参数的URI,如:
URI uri = URIUtils.createURI("http", "localhost", -1, "/index.html",
"param1=value1¶m2=value2", null);
HttpUriRequest request = new HttpGet(uri);
System.out.println(request.getURI());
上例的打印结果如下:
http://localhost/index.html?param1=value1¶m2=value2
(3)
需要注意的是,如果参数中含有中文,需将参数进行URLEncoding处理,如:
String param = "param1=" + URLEncoder.encode("中国", "UTF-8") + "¶m2=value2";
URI uri = URIUtils.createURI("http", "localhost", 8080,
"/sshsky/index.html", param, null);
System.out.println(uri);
上例的打印结果如下:
http://localhost/index.html?param1=%E4%B8%AD%E5%9B%BD¶m2=value2
(4)
对于参数的URLEncoding处理,HttpClient程序包为我们准备了另一个工具类:URLEncodedUtils。通过它,我们可以直观的(但是比较复杂)生成URI,如:
List params = new ArrayList();
params.add(new BasicNameValuePair("param1", "中国"));
params.add(new BasicNameValuePair("param2", "value2"));
String param = URLEncodedUtils.format(params, "UTF-8");
URI uri = URIUtils.createURI("http", "localhost", 8080,
"/sshsky/index.html", param, null);
System.out.println(uri);
上例的打印结果如下:
http://localhost/index.html?param1=%E4%B8%AD%E5%9B%BD¶m2=value2
request-body
与request-line方式不同,request-body方式是在request-body中提供参数,此方式只能用于POST请求。在 HttpClient程序包中有两个类可以完成此项工作,它们分别是UrlEncodedFormEntity类与MultipartEntity类。这两个类均实现了HttpEntity接口。
(1)
使用最多的是UrlEncodedFormEntity类。通过该类创建的对象可以模拟传统的HTML表单传送POST请求中的参数。如下面的表单:
<form action="http://localhost/index.html" method="POST">
<input type="text" name="param1" value="中国"/>
<input type="text" name="param2" value="value2"/>
<inupt type="submit" value="submit"/>
</form>
我们可以用下面的代码实现:
List formParams = new ArrayList();
formParams.add(new BasicNameValuePair("param1", "中国"));
formParams.add(new BasicNameValuePair("param2", "value2"));
HttpEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
HttpPost request = new HttpPost(“http://localhost/index.html”);
request.setEntity(entity);
当然,如果想查看HTTP数据格式,可以通过HttpEntity对象的各种方法取得。如:
List formParams = new ArrayList();
formParams.add(new BasicNameValuePair("param1", "中国"));
formParams.add(new BasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
System.out.println(entity.getContentType());
System.out.println(entity.getContentLength());
System.out.println(EntityUtils.getContentCharSet(entity));
System.out.println(EntityUtils.toString(entity));
上例的打印结果如下:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
39
UTF-8
param1=%E4%B8%AD%E5%9B%BD¶m2=value2
(2)
除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为 multipart/form-data。在HttpClient程序扩展包(HttpMime)中专门有一个类与之对应,那就是 MultipartEntity类。此类同样实现了HttpEntity接口。如下面的表单:
<form action="http://localhost/index.html" method="POST"
enctype="multipart/form-data">
<input type="text" name="param1" value="中国"/>
<input type="text" name="param2" value="value2"/>
<input type="file" name="param3"/>
<inupt type="submit" value="submit"/>
</form>
我们可以用下面的代码实现:
MultipartEntity entity = new MultipartEntity();
entity.addPart("param1", new StringBody("中国", Charset.forName("UTF-8")));
entity.addPart("param2", new StringBody("value2", Charset.forName("UTF-8")));
entity.addPart("param3", new FileBody(new File("C:\\1.txt")));
HttpPost request = new HttpPost(“http://localhost/index.html”);
request.setEntity(entity);
发表评论
-
Zookeeper+SolrCloud+Tomcat搭建分布式搜索应用
2016-03-10 15:39 1060一.简介 SolrCloud是Solr4.0版本以后基于Sol ... -
ZooKeeper之java客户端访问-入门介绍
2016-03-04 10:47 807时间 2014-03-22 22:42:48 CS ... -
Solr 4.7.0部署及java调用solr
2016-02-25 15:19 549参考了以下2个网站 1.Solr在tomcat中的部署 htt ... -
MyBatis 配置sql语句输出
2015-09-29 15:37 13181.首先将ibatis log4j运行级别调到DEBUG可以在 ... -
自定义alert提示框
2015-09-23 16:48 679js和css写的自定义弹出框,可以自己修改颜色和布局,使得弹出 ... -
js判断手机系统类型
2015-09-21 13:52 611function checkOSType(){ ... -
Java生成二维码,扫描后跳转到指定的网站
2015-09-16 22:25 9658本例我是应用google的二维码工具包来做的,附近提供jar包 ... -
net.sf.json.JSONObject 依赖的包
2015-03-01 20:55 6465依赖的包如下图: 主包为json-lib-2.3-jdk13. ... -
通过阻塞队列实现文件关键字检索功能
2015-01-26 13:57 661package com.queue; import ... -
Tomcat热部署
2014-11-25 09:50 550\conf\Catalina\localhost目录下新建xm ... -
合并多个excel文件到一个文件
2014-11-16 19:41 1262package com.ben.utils; imp ... -
Java实现FTP上传和下载
2014-08-14 15:04 881import java.io.ByteArrayInput ... -
使用正则表达式替换数字
2014-06-19 16:38 1239public static void main(Strin ... -
Java Webservice例子
2014-06-17 12:38 5201.webservice服务端代码,发布一个webservic ... -
Java基础知识汇总
2014-05-08 08:28 597一、关于main方法 1.main方法被定义为private, ... -
查看JDK源码
2014-05-07 22:54 538查看JDK源码: step1:打开MyEclipse选择Wi ... -
Java中取两个集合的并集、交集和差集
2014-04-23 16:58 112741.并集 也叫合集,即把两个集合的所有元素加在一起。 pu ... -
JXPathContext支持迷糊匹配
2014-03-12 15:40 1082看完例子就会了 public ... -
统计英文单词的数量
2014-03-12 10:18 779使用正则表达式来统计一段文字中的英文单词的数量 publi ... -
使用序列化方法实现list集合的深拷贝
2014-03-05 14:28 3018对于可序列化(实现Serializable接口)的对象,封装它 ...
相关推荐
java代码-使用java解决带参发送post方式的http请求的源代码 ——学习参考资料:仅用于个人学习使用!
Apache HttpClient库提供了一种强大的方法来执行HTTP请求,无论是简单的GET请求还是复杂的带有表单参数的POST请求。本文将通过具体的代码示例,详细介绍如何使用Java HttpClient来发送这两种类型的请求。 #### 二、...
kettle抽取http请求,发送json参数 在数据integration和ETL(Extract, Transform, Load)过程中,kettle是一个常用的数据抽取工具。下面通过一个示例,来说明如何使用kettle抽取http请求,发送json参数。 标题解释...
在Spring Boot应用中,处理HTTP请求的入参和出参通常是通过模型绑定和自定义转换器来实现的。本文将详细讲解如何配置JSON数据格式,以便于解析和序列化日期等复杂类型的数据。 首先,针对请求入参的JSON数据格式...
在Android开发中,网络请求是应用与服务器交互的重要部分,AndBase框架提供了一种便捷的方式来完成Http请求。本文主要探讨如何使用AndBase框架进行无参和有参的Http Get及Post请求。 首先,我们来看如何使用AndBase...
无参数的POST请求,顾名思义,就是不通过HTTP请求体(body)传递任何数据的POST请求。尽管它被称为“无参数”,但实际上仍然可以通过其他方式向服务器传递必要的信息,例如通过请求头(header)或者查询字符串...
在Oracle环境中,利用PL/SQL进行HTTP请求(特别是GET请求)是一项非常实用的功能。这不仅能够帮助我们实现与外部Web服务的交互,还能拓展Oracle数据库的功能边界。以下是对给定文件中的代码进行的详细解析。 #### ...
Unity 中通过UnityWebRequest 以GET形式传authorization 的参数请求数据。 注意: 以Header头文件的形式发送请求,authorization要放入请求头部。 以头文件形式发起请求进行Token验证,token为Authorization中的...
这将发送如下HTTP请求: ``` POST http://www.example.com HTTP/1.1 Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]} ``` 总结一下,GET请求通常用于获取资源,其参数显示在URL中,...
if (responseCode == HttpURLConnection.HTTP_OK) { System.out.println("请求成功"); // 在这里处理响应数据 } else { System.out.println("请求失败,状态码:" + responseCode); } } } ``` 这个Java示例...
#### 二、带有文件参数的HTTP请求分析 在某些场景下,我们需要通过HTTP请求上传文件到服务器,这时就需要使用到`files`参数。不同于普通的`data`参数,`files`参数需要特殊的处理方式。 #### 三、实例代码详解 ...
服务类中会包含执行HTTP请求的方法,可能包括设置请求头、处理响应等逻辑。 4. **使用库封装HTTP请求**: - `HttpURLConnection`是Java标准库的一部分,适合简单的需求,但功能相对有限。对于更复杂的场景,推荐...
用java编写了http Post的请求代码,通过发送请求的 URL,获取远程资源的响应结果,入参为json字符串。使用到httpPost,CloseableHttpClient
在Android开发中,网络编程是不可或缺的一部分,而OkHttp作为一款高效的HTTP客户端库,被广泛应用于Android应用中。本文将详细讲解如何利用OkHttp的请求拦截器(Interceptor)实现请求的拦截并打印日志到logcat,这...
PB 提交 WEB 请求包含中文参数的解决方案全过程 PB 是 PowerBuilder 的缩写,这是一种流行的开发工具,但是在提交 WEB 请求包含中文参数时,会出现乱码问题。本文将详细介绍如何解决这个问题,包括使用 GETURL 和 ...
在Spring Cloud技术栈中,Feign作为一种声明式的HTTP客户端框架,极大地简化了微服务间的HTTP请求调用过程,使其几乎如同调用本地方法一般方便。然而,在实际开发过程中,Feign并非完全无懈可击,开发者经常会遇到...
在本教程中,我们将深入探讨如何使用Maven构建一个基于Wink框架的RESTful服务,特别是处理带有参数的GET请求。Wink是Apache的一个开源项目,它提供了实现RESTful Web服务的一系列工具和库,而Maven则是一个流行的...
在Java编程中,处理HTTP请求,特别是GET和POST方式,是常见的任务。本文将深入探讨如何在Java中实现URL带请求参数(GET/POST)以及如何获取这两种请求的URL和参数列表。 首先,我们来看如何发送带有参数的GET和POST...
在Java Spring MVC框架中,Controller是处理HTTP请求的核心组件,它负责接收客户端发送的数据并进行业务逻辑处理。本文将详细讲解在Spring Controller中获取请求参数的六种常见方法。 1. **直接作为方法参数** 当...