OkHTTPClient
一,OKHttp介绍
okhttp是一个第三方类库,用于android中请求网络。
这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。
okhttp有自己的官网,官网网址:OKHttp官网
如果想了解原码可以在github上下载,地址是:https://github.com/square/okhttp
在AndroidStudio、gradle中使用不需要下载jar包,直接添加依赖即可:
compile ‘com.squareup.okhttp3:okhttp:3.4.1’
项目中遇到的问题:
public JSONObject doPost(String url, JSONObject params,Boolean token,String type) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(JDCommonConstant.TIME_OUT, TimeUnit.SECONDS)
.readTimeout(JDCommonConstant.TIME_OUT, TimeUnit.SECONDS)
.build();
Set<String> iterator = null;
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
if(params != null) {
iterator = params.keySet();
for (String str : iterator) {
// log.info("当前参数::"+ str + " 类型:" + params.get(str).getClass());
String value = params.getString(str);
value=value.startsWith("\"")?value.substring(1,value.length()-1):value;
value=value.endsWith("\"")?value.substring(0,value.length()-1):value;
value=StringEscapeUtils.unescapeJava(value);
// log.info("当前参数的值::"+value +" 长度:"+ value.length());
builder.addFormDataPart(str, value);
}
}else {
builder.addFormDataPart("token", "");
}
RequestBody body = builder.build();
Request request = new Request.Builder()
.url(finalUrl)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
if(response.isSuccessful()) {
String str = response.body().string();
str=str.startsWith("\"")?str.substring(1,str.length()-1):str;
str=str.endsWith("\"")?str.substring(0,str.length()-1):str;
JSONObject object = JSON.parseObject(str);
log.info("接口返回值:"+ JSON.toJSONString(object));
return object;
}else {
//请求失败return null;
}
} catch (IOException e) {return null;
}
}
结果:无法访问,报错
解决:由于公司是内网,需要设置代理,增加代理
int proxyPort = 端口号8080;
String proxyHost = "代理host";
final String username = "";
final String password = "";
Authenticator proxyAuthenticator = new Authenticator() {
@Override public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
} }; OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(JDCommonConstant.TIME_OUT, TimeUnit.SECONDS)
.readTimeout(JDCommonConstant.TIME_OUT, TimeUnit.SECONDS)
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)))
.proxyAuthenticator(proxyAuthenticator)
.build();
okhttp的使用详细介绍:https://blog.csdn.net/larryqingping/article/details/79440665
OkHTTPClient的更多相关文章
- okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数
如标题所示,okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数,有遇到这样现象的朋友吗? 原因:因使用的是 ...
- Android封装OkHttpClient的类库
由于android6.0的SDK没有HttpClient,只有HttpURLConnection和OkHttpClient,特记下OkHttpClient的使用方法 1.Ui测试界面布局 <?x ...
- OAthe2 Login use OkHttpClient and OAuth2RestTemplate
http://samchu.logdown.com/posts/1437422-oathe2-login-use-okhttpclient-and-oauth2resttemplate?utm_sou ...
- 使用OkHttpClient处理json请求处理的方式
今天遇到一个问题,重构老系统时,前端传递的参数是一个json,controller层可以用@ResponseBody来接收. 因为新系统用的是spring cloud这一套,调用其他服务使用的是fei ...
- Android Studio OkHttpClient使用
本次来记录下OkHttpClient的使用,OkHttpClient是用来完成android 客户端对服务端请求的工具. 首先记住,使用网络的时候一定要加入权限,加入到AndroidMainfest. ...
- OkHttpClient简单封装
一.接口 public interface HttpListener { void onFinish(String reponse); void onError(Exception e); } 二.O ...
- Okhttp3源码解析(1)-OkHttpClient分析
### 前言 上篇文章我们讲了[Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f),今天根据上节讲到请求流程来分析源码,那么第一步就是实例化OkH ...
- OkHttpClient调优案例
OkHttpClient调优案例 作者:Grey 原文地址: 语雀 博客园 Github 实际案例 系统运行一段时间后,线程数量飙升,CPU持续居高不下 排查工具 https://fastthread ...
- feign使用okHttpClient,调用原理
最近项目中 spring cloud 用到http请求,使用feign,配置okhttp,打算配置一下就直接使用,不过在压测与调优过程中遇到一些没有预测到的问题,附上排查与解析结 yml.pom配置 ...
随机推荐
- python RE模块的使用
摘要: re模块包括操作正则表达式的函数,一些工作中都需要用到,现在说明下使用方法. 使用说明: 一,re模块下的函数: 函数 描述 compile(pa ...
- 新概念英语(1-49)At the butcher's
新概念英语(1-49)At the butcher's What does Mr. Bird like? A:Do you want any meat today, Mrs. Bird? B:Yes, ...
- eclipse开发Groovy代码,与java集成,maven打包编译
今天尝试了一下在eclipse里面写Groovy代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来. 首先需要给eclipse安装一下Groovy的插件,插件地址:https://gith ...
- nodejs调试总结
之前nodejs开发中最痛苦的就是调试,因为我之前开发node时使用的编辑器还没有将nodejs的调试也集成进去,所以简单对nodejs开发的调试做了点探索,nodejs本身就有调试功能,同时node ...
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...
- Spark RDDs vs DataFrames vs SparkSQL
简介 Spark的 RDD.DataFrame 和 SparkSQL的性能比较. 2方面的比较 单条记录的随机查找 aggregation聚合并且sorting后输出 使用以下Spark的三种方式来解 ...
- 点击后退按钮回到本页面中的另一个标签页(tab)
在使用zepto进行微信网页开发的时候,遇到一个情况,在本页面存在四个TAB栏,每点击一个栏会显示相应的内容,下图这种: 现在有一个需求是,用户点击了后退按钮,需要回到上一次点击的tab栏. 这个需求 ...
- ubuntu安装IBM DB2 Express-C
去 官网 下载DB2对应Linux下的安装包和语言包.
- PAT 1082. 射击比赛 (20)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...
- codevs 3249 搭积木
提交地址:http://codevs.cn/problem/3249/ 3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目 ...