okHttp是一个第三方的库被Square开发用来发送和接收接触的Http request 和response。它建立在Okio库上。Okio库试图通过共享内存池(shared memory pool)构建相比标准java I/O库,更有效的读写数据。它还是Retorfit的底层库提供更类型安全的消费REST-based API。
okHttp库事实上提供HttpUrlConnection的接口实现。底层HttpUrlConnection类可能是oKHttp库的底层实现。然而在oKHttp中的提供了一个分离的API,事发送以及接收网络请求更加容易。
OkHttp v2.4也提供了一个内部管理URL的升级方法,替代java.net.URL
,java.net.URI
,或者android.net.Uri
类,它提供了一个新的HttpUrl
类,提供更加方便的方法获取Http端口,URL解析,和处理URL字符串。
SetUp
确保在AndroidManifest.xml
文件中打开了使用网络权限:
将下列行添加到你的app/build.gradle
文件中:
compile 'com.squareup.okhttp3:okhttp:3.3.0'
Note:如果将okHttp升级,导入也需要修改为:
import com.squareup.okhttp.XXXX to import okhttp3.XXXX
Note:如果你打算在OkHttp3中使用Picasso,确保添加基础下载。这个变化是必须的直到下个版本的Picasso
dependencies{
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
}
Sending and Receiving Network Requests
首先 我们初始化okHttpclient 并且建立一个 Request实例
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://publicobject.com/helloworld.txt")
.build()
如果需要添加其他的查询参数,这个okHttp库提供HttpUrl
类可以方便的构造URL:
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://ajax.googleapis.com/ajax/services/search/images").newBuilder();
urlBuilder.addQueryParameter("v", "1.0");
urlBuilder.addQueryParameter("q", "android");
urlBuilder.addQueryParameter("rsz", "8");
Sring url = urlBuilder.build().toString();
Request request = new Request.Builder()
.url(url)
.build();
如果有任何查询效验参数,request可以添加效验头部:
Request request = new Request.Builder()
.header("Authorization", "token abcd")
.url("https://api.github.com/users/codepath")
.build();
Http Post Json
public static final MediaType JSON = MediaType.parse("application/json; charset = utf-8")
OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException{
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
if(response.isSuccessful())
{
return response.body().string();
}else{
throw new IOException("Unexpected code " + response);
}
}
Htttp Post 提交键值对
使用FormEncodingBuilder 来构建和HTML