您的位置:首页 > 理论基础 > 计算机网络

okhttp3+retrofit2进行HTTP请求以及设置请求超时示例

2016-06-22 16:30 615 查看
采用retrofit2本身可以进行优雅的RESTFul请求,但是无法设置请求超时时间,需要配合okhttp3来设置请求超时.
<retrofit-version>2.0.2</retrofit-version>
<okhttp-version>3.3.1</okhttp-version>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>${retrofit-version}</version>
</dependency>
<dependency>
<groupId>org.ligboy.retrofit2</groupId>
<artifactId>converter-fastjson</artifactId>
<version>${retrofit-version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp-version}</version>
</dependency>


相关网站:
http://square.github.io/retrofit/
https://github.com/square/retrofit

https://github.com/square/okhttp
http://square.github.io/okhttp/
//Retrofit请求接口
public interface CmsManager{
@GET("/sword/cms/web/sitesync/site")
Call<JSONObject> verifySite(@QueryMap Map<String,String> params);
}
public static void sync(SyncMeta meta){
Map<String,String> map=new HashMap<>();
map.put("siteKey", meta.getSiteKey());
map.put("siteMd5", meta.getSiteMd5());
log.info("site key is:{} ;; site md5 is :{}",meta.getSiteKey(),meta.getSiteMd5());

OkHttpClient.Builder httpBuilder=new OkHttpClient.Builder();
OkHttpClient client=httpBuilder.readTimeout(3, TimeUnit.MINUTES)
.connectTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES) //设置超时
.build();
Retrofit retrofit=new Retrofit.Builder().baseUrl(meta.getRemoteUrl()) //设置请求路径
.addConverterFactory(FastJsonConverterFactory.create()) //设置转换器为FastJson提供的工厂
.client(client).build(); //设置请求客户端为OkHttpClient
CmsManager cms=retrofit.create(CmsManager.class);
Call<JSONObject> call=cms.verifySite(map);
//异步请求方式
//		call.enqueue(new Callback<JSONObject>() {
//			@Override
//			public void onResponse(Call<JSONObject> arg0, Response<JSONObject> arg1) {
//				JSONObject obj=arg1.body();
//				log.info("向cms管理端请求成功,返回值为{}",obj==null?"":obj.toJSONString());
//			}
//			@Override
//			public void onFailure(Call<JSONObject> arg0, Throwable arg1) {
//				log.error("向cms管理端请求失败",arg1);
//			}
//		});
try {
//同步请求方式
Response<JSONObject> resp=call.execute();
JSONObject obj=resp.body();
log.info("向cms管理端请求成功,返回值为{}",obj==null?"":obj.toJSONString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("向cms管理端请求失败",e);
}

}


参考:
http://stackoverflow.com/questions/29380844/how-to-set-a-timeout-in-retrofit-library
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息