java 的http请求方式:HttpURLConnection和HttpClient
1、要了解一些概念性的东西,比如Http的协议以及协议头等一些东东
2、HttpURLConnection一般步骤:创建URL对象==》获取URL的HttpURLConnection对象实例==》设置HTTP请求使用的方法==》设置超时和消息头==》对服务器响应码判断==》获得服务器返回的输入流==》关掉HTTP连接
2.1、GET请求示例
- //创建URL对象,xxx是服务器API
- URL url = new URL("xxx");
- //调用URL对象的openConnection( )来获取HttpURLConnection对象实例
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- //请求方法为GET
- conn.setRequestMethod("GET");
- //设置连接超时为5秒
- conn.setConnectTimeout(5000);
- //服务器返回东西了,先对响应码判断
- if (conn.getResponseCode() == 200) {
- //用getInputStream()方法获得服务器返回的输入流
- InputStream in = conn.getInputStream();
- byte[] data = read(in); //流转换为二进制数组,read()自己写的是转换方法
- String html = new String(data, "UTF-8");
- System.out.println(html);
- in.close();
- }
ps:上述步骤基于服务器接口正常的前提下,当然异常要另外处理,请求头按实际需要设置,得到服务器返回的输入流后按需要转换使用,另外有时候网络请求要开一条线程
2.2、POST请求:POST请求大体和GET一致,只是设置相关参数的时候要注意设置允许输入、输出,还有POST方法不能缓存,要手动设置为false
- //创建URL对象,xxx是服务器API
- URL url = new URL("xxx");
- //调用URL对象的openConnection( )来获取HttpURLConnection对象实例
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- //请求方法为GET
- conn.setRequestMethod("POST");
- //设置连接超时为5秒
- conn.setConnectTimeout(5000);
- //允许输入输出
- conn.setDoInput(true);
- conn.setDoOutput(true);
- //不能缓存
- conn.setUseCaches(false);
- //至少要设置的两个请求头
- conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
- //输出流包含要发送的数据,要注意数据格式编码
- OutputStream op=conn.getOutputStream();
- op.write(new String("name=zhylioooo").getBytes());
- //服务器返回东西了,先对响应码判断
- if (conn.getResponseCode() == 200) {
- //用getInputStream()方法获得服务器返回的输入流
- InputStream in = conn.getInputStream();
- byte[] data = read(in); //流转换为二进制数组,read()是转换方法
- String html = new String(data, "UTF-8");
- System.out.println(html);
- in.close();
- }
3、HttpClient的使用步骤:创建HttpClient对象==》创建Http请求对象(GET、POST不同)==》设置请求参数==》执行请求==》获取响应对象==》对响应对象处理==》关闭相应对象==》关闭HttpClient
3.1、GET
- //创建httpclient对象
- CloseableHttpClient httpclient = HttpClients.createDefault();
- //创建GET对象
- HttpGet httpget = new HttpGet("xxx");//xxx是服务器API
- //执行请求
- CloseableHttpResponse response = httpclient.execute(httpget);
- if(response.getStatusLine().getStatusCode()==200) {
- HttpEntity entity = response.getEntity();
- //所需内容都在entity里面,这里可以对数据操作
- String detail = EntityUtils.toString(entity,"UTF-8");
- System.out.println(detail);
- }
- response.close();
- httpclient.close();
如果需要参数,可以用URIBuilder
工具类来简化
- URI uri = new URIBuilder()
- .setScheme("https")
- .setHost("xxx")
- .setPath("/xxx")
- .setParameter("key1", "value1")
- .setParameter("key2", "value2")
- .build();
- HttpGet httpget = new HttpGet(uri);
3.2、POST:POST一般用于提交一些特别的东西,内容多种多样,HttpClient针对不同内容提供了不同的数据容器,如最常见的字符串(StringEntity),字节数组(ByteArrayEntity),输入流(InputStreamEntity),和文件(FileEntity),请注意InputStreamEntity
是不可重复的,因为它只能从底层数据流中读取一次。一般建议实现一个自定义HttpEntity
类,而不是使用泛型InputStreamEntity
。 FileEntity
可以是一个很好的起点:
- File file = new File("xxx.txt");
- FileEntity entity = new FileEntity(file,
- ContentType.create("text/plain", "UTF-8"));
- HttpPost httppost = new HttpPost("xxx");
- httppost.setEntity(entity);
POST最常见的提交表单数据:创建完HttpPost对象后,通过NameValuePair集合来存储等待提交的参数,并将参数传递到UrlEncodedFormEntity中,最后调用setEntity(entity)完成, HttpClient.execute(HttpPost)即可:
- List<NameValuePair> formparams = new ArrayList<NameValuePair>();
- formparams.add(new BasicNameValuePair("name", "zhylioooo"));
- formparams.add(new BasicNameValuePair("pswd", "123456"));
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
- HttpPost httppost = new HttpPost("xxx");
- httppost.setEntity(entity);
4、一般实际开发很少自己写HttpURLConnection和HttpClient,都是用别人封装 好的第三方网络请求框架,例如:Volley,android-async-http,loopj等,因为网络操作涉及到 异步以及多线程,自己动手写的话很麻烦,所以实际开发还是直接用第三方。
5、HttpClient用到的jar包:https://pan.baidu.com/s/1gfjHi2B
java 的http请求方式:HttpURLConnection和HttpClient的更多相关文章
- Http请求的 HttpURLConnection 和 HttpClient
HTTP 请求方式: GET和POST的比较 请求包.png 例子.png 响应包.png 例子.png 请求头描述了客户端向服务器发送请求时使用的http协议类型,所使用的编码,以及发送内容的长度, ...
- Android之Http通信——3.Android HTTP请求方式:HttpURLConnection
3.Android HTTP请求方式之HttpURLConnection 引言: 好了,前两节我们已经对HTTP协议进行了学习.相信看完前两节的朋友对HTTP协议相比之前 应该更加熟悉吧.好吧.学了要 ...
- 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好
安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上不少人都认为Htt ...
- Android HTTP请求用HttpUrlConnection与HttpClient比较
在安卓和JAVA应用开发中需要访问网络,少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上 ...
- HTTP访问的两种方式:HttpURLConnection和HTTPClient的比较
http://blog.sina.com.cn/s/blog_87216a0001014sm7.html http://www.2cto.com/kf/201305/208770.html ----- ...
- android 中的Http请求类HttpUrlConnection和HttpClient类
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient. 如何选择这两个类的使用:android-developers.blogspot.com/2011 ...
- 两种请求方式URLHttpconnection 和Httpclient提交表单 网络篇(二)
安卓有两种发送请求的方式:URLHttpconnection 和Httpclient 下面就来讲下这两种方式,这篇是最基础的使用 进阶请看第二篇 先占位 打扫卫生去了T T 快过年了 框架就放网络篇 ...
- JAVA模拟各种请求方式访问RESTFUL
//打开restful链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 提交模式 conn.setReq ...
- android 网络编程之HttpURLConnection与HttpClient使用与封装
1.写在前面 大部分andriod应用需要与服务器进行数据交互,HTTP.FTP.SMTP或者是直接基于SOCKET编程都可以进行数据交互,但是HTTP必然是使用最广泛的协议. 本文并 ...
随机推荐
- Spring Security 入门原理及实战
目录 从一个Spring Security的例子开始 创建不受保护的应用 加入spring security 保护应用 关闭security.basic ,使用form表单页面登录 角色-资源 访问控 ...
- SQL——模糊查询
前言 在这个大数据时代,我们都离不开对数据的增删改查,增加.删除.修改这些看似都是一步完成的事情,但是对于查询来说,好的查询SQL可以大大的减少系统内存运行时间,提高系统的反应速度.这里简单的介绍一下 ...
- 事务隔离实现并发控制:MySQL系列之十
一.并发访问控制 实现的并发访问的控制技术是基于锁: 锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁:InnoDB支持表级锁和行级锁: 锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其 ...
- Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子
果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. ...
- 插入po得到主键,插入sql得到主键
import com.yd.common.data.CIPPageInfo; import com.yd.common.data.CIPReqCondition; import com.yd.comm ...
- mysql执行计划 const eq_ref ref range index all
explain:查询查询性能或者需要查看使用索引状态 一.type:连接类型 最关键的一列 效率(const>eq_ref>ref>range>index>all) ...
- mycat分片规则之分片枚举(sharding-by-intinfile)
mycat分片规则之分片枚举(sharding-by-intinfile) http://blog.51cto.com/goome/2058959 mycat安装及分片初体验 https://blog ...
- Harry And Biological Teacher 分块 + 字符串hash
http://acm.hdu.edu.cn/showproblem.php?pid=5069 首先判断suffix和prefix最长多少可以直接暴力枚举长度然后 + hash可以立马判断是否相等,复杂 ...
- 【JavaEE】怎么设置tomcat管理员的用户名和密码
如果我们输入错误的Tomcat管理员密码,那么就有提示如下: 2 从它的提示信息中,我们就能找到解决方法,请留意上图中标出的位置! 我们首先打开Tomcat的配置文件,具体如下: 我们进入To ...
- JNA-调用win32 Dll文件
1. 描述备注 参考地址1 JNA示例代码 1.1 JNA工作原理 JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用java直接访问动态链接库中的函数. 原来使用JNI,你必须 ...