导航:首页 > 操作系统 > androidokhttp使用

androidokhttp使用

发布时间:2024-08-31 18:23:48

❶ okhttp使用中自己要处理哪些错误和异常

OkHttp是一个相对成熟的解决方案,据说android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。
OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。
使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。

❷ Okhttp 使用详解

一个最简单的OkHttpClient

一个复杂点的OkHttpClient配置

具体可配置参数见OkHttpClient.Builder类,几点注意事项:

两种拦截器的区别

官方提供的Logging Interceptor

地址: https://github.com/victorfan336/okhttp-logging-interceptor
gradle.build中添加依赖:
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'

通过Request.Builder创建请求,默认是Get请求

主要是构建RequestBody,并设置Content-Type消息头。

1.普通Post请求

比如json请求

2. 使用FormBody传递键值对参数
Content-Type: application/x-www-form-urlencoded
比如:

3. 使用RequestBody传递Json或File对象

4. 使用MultipartBody同时传递键值对参数和File对象

5. 使用MultipartBody提交分块请求

6. 自定义RequestBody实现流的上传

1、同步执行

由于android强制要求网络请求在线程中执行,所以无法使用execute

2、异步执行

1. 设置请求头

2. 设置超时

3. 设置缓存

1、对于Get请求,如果请求参数较多,自己拼接Url较为麻烦

比如

拼接结果: http://www..com/user/login/username=zhangsan&password=123456

如果能做一些封装,直接addParam(key,value)的形式则会简单很多。

2、Callback在子线程中回调,大部分时候,我们都是需要更新UI的,还需自己post到主线程中处理。
3、构建请求步骤比较多
因此,Square提供了针对OkHttp的封装库Retrofit,另外Github上也有很多第三方的封装库,比如OkGo。

❸ Android使用OkHttp请求自签名的https网站

很多公司考虑到安全问题,项目中都采用https加密协议进行数据传输。但是一些公司又不想花一笔钱去CA申请证书,所以就采用自签名的证书。

OkHttp默认是可以访问通过CA认证的HTTPS链接,例如网络首页也是https链接( https://www..com/ )。 但是如果是你们公司自签名(即自己用keytool生成的证书,而不是采用通过CA认证的证书)的服务器,OkHttp是无法访问的,例如访问12306网站( https://kyfw.12306.cn/otn/ ) ,会报如下错误:

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。握手过程的简单描述如下:

握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。

以下我们使用12306网站为例

注意:别忘了加权限和依赖okhttp库

Demo地址: https://github.com/wildma/okhttps
参考博客: http://blog.csdn.Net/lmj623565791/article/details/48129405

❹ Android通过OKhttp从服务器端获取数据

①简单的异棚洞步Get请求
第一步,创建OKHttpClient对象
第二步,创建Request请求
第三步,创建一个Call对象
第四步,将请求添大和贺加到调度中
不多说,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//okHttp的基本使用 --- get方法
String url = "https://api.douban.com/v2/movie/top250?start=0&count=10";
//1,创建OKHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
//2,创建一个Request
Request request = new Request.Builder().url(url).build();
//3,创建一个call对象
Call call = mOkHttpClient.newCall(request);
//4,将请求添加到调滚派度中
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
final String message = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
tv_message.setText(message);
progressBar.setVisibility(View.GONE);
}
});

}
}

});

❺ Android Okhttp/Retrofit网络请求加解密实现方案

比较安全的方案应该是AES+RSA的加密方式。具体如下图所示。

为什么要这样做呢?
1、RSA是非对称加密,公钥和私钥分开,且公钥可以公开,很适合网络数据传输场景。但RSA加密比较慢,据说比AES慢100倍,且对加密的数据长度也有限制。
2、AES是对称加密,加密速度快,安全性高,但密钥的保存是个问题,在网络数据传输的场景就很容易由于密钥泄露造成安全隐患
3、所以,AES+RSA结合才更好,AES加密数据,且密钥随机生成,RSA用对方(服务器)的公钥加密随机生成的AES密钥。传输时要把密文,加密的AES密钥和自己的公钥传给对方(服务器)。对方(服务器)接到数据后,用自己的私钥解密AES密钥,再拿AES密钥解密数据得到明文。这样就综合了两种加密体系的优点。
4、除上面说的外,还可以加签名,即对传输的数据(加密前)先做个哈希,然后用自己的RSA私钥对哈希签名(对方拿到自己的公钥可以验签),这样可以验证传输内容有没有被修改过。

就java来说,加密的输入和输出都是字节数组类型的,也就是二进制数据,网络传输或本地保存都需要重新编码为字符串。推荐使用Base64。Android 有自带的Base64实现,flag要选Base64.NO_WRAP,不然末尾会有换行影响服务端解码。
Android中Base64加密

总而言之,这些不同语言都有实现库,调用即可,关键是参数要一致,具体还需要和后台联调一下。
rsa加解密的内容超长的问题解决

现在说到网络框架,应该毫无疑问是Retrofit了。上面说的加密方案说到底还是要在网络请求框架内加上,怎么做入侵最小,怎么做最方便才是重点。
1、坑定不能直接在接口调用层做加密,加参数,这样每个接口都要修改,这是不可能的。
2、ConverterFactory处理,这也是网上可以搜到的很多文章的写法,但我觉得还是有入侵。而且有点麻烦。
3、OkHttp添加拦截器,这种方法入侵最小(可以说没有),实现呢也非常优雅。
下面的实现,网上也找不到多少可以参考的文章,但不得不说,OkHttp的封装和设计真的很好用,所见即所得。看下源码,就知道该怎么用了,连文档都不用查。

主要注意点:
0、和接口无关的新加的数据放在请求头里。
1、该close的要close,不然会内存泄漏。
2、新旧Request和Response要区分好,新的要替换旧的去传递或返回。
3、要对response.code()做处理,只有在和后台约定好的返回码下才走解密的逻辑,具体看自己的需求,不一定都是200。

阅读全文

与androidokhttp使用相关的资料

热点内容
php明年的今天 浏览:113
麒麟970也能用方舟编译器么 浏览:473
金融实验大作业python 浏览:793
云服务器搭建聊天室 浏览:601
怎么在手机上下载荔枝app 浏览:13
湖南戴尔服务器云空间 浏览:361
联想驱动怎么解压 浏览:266
程序员进化论解说 浏览:871
怎么设置个性化文件夹图标 浏览:390
基金投资与入门技巧pdf 浏览:891
十六进制文件反编译成c语言 浏览:579
程序员手术裸辞 浏览:251
编译生成错误是什么原因 浏览:965
我命令你停下用英语怎么说 浏览:75
rtk文件夹不正确怎么办 浏览:926
java方法签名 浏览:83
java程序员加薪申请书 浏览:600
女孩子如何嫁给程序员 浏览:657
安卓的动画响应为什么卡 浏览:835
怎么把axure放到服务器上 浏览:847