1.header 请求头
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url("http://c.m.163.com/nc/video/list/00850FRB/n/0-10.html")
.header("User-Agent", "Mozilla/5.0 (Linux; X11)")
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
2.Form表单
FormBody formBody = new FormBody.Builder()
.add("username", "11")
.add("password", "11")
.build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("http://yun918.cn/study/public/index.php/login").post(formBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
3.String字符串
// url 字符串
String json = "{\"page\":\"1\",\n" +
" \"count\":\"2\",\n" +
" \"type\":\"video\"\n" +
" }";
RequestBody requestBody = RequestBody.create(MediaType.parse("text/json"), json);
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.post(requestBody)
.url("https://api.apiopen.top/getJoke").build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
4.上传流
RequestBody requestBody = new RequestBody() {
@Override
public MediaType contentType() {
return MediaType.parse("application/text");
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeUtf8("I am programer!");
}
};
// requestBody
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("yourselft url ")
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
5.上传文件
/**
* 上传文件
* 文件上传接口:http://yun918.cn/study/public/file_upload.php
* 传输类型 post
* 参数:(String key,String file);
* key 上传文件的文件夹(自己随意传)
* file 固定的"file"参数里面放上传文件的流内容
*/
public void testUploadFile() {
// 1-获取上传的文件的地址
String filePath = Environment.getExternalStorageDirectory() + File.separator + "aaa.jpg";
// 2.filepath ---》File
File file = new File(filePath);
// 3.file--RequestBody
RequestBody fileRequestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
//4.封装所有字段数据
MultipartBody multipartBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)// form 表单类型
.addFormDataPart("key", "1907A")// 会在服务端创建文件夹(名字=1907A)里保存上传的文件
.addFormDataPart("file", file.getName(), fileRequestBody)
.build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://yun918.cn/study/public/file_upload.php")
.post(multipartBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
}
HttpURLconnection及OkHttp3的对比
1,HttpUrlConnection,google官方提供的用来访问网络,但是实现的比较简单,只支持1.0/1.1
2,没有多路复用,如果碰到app大量网络请求的时候,性能比较差,
3,HttpUrlConnection底层也是用Socket来实现的
4,OkHttp像HttpUrlConnection一样,实现了一个网络连接的过程。
5,OkHttp和HttpUrlConnection是一级的,用socket实现了网络连接,OkHttp更强大,
6,HttpUrlConnection在IO方面用到的是InputStream和OutputStream,但OkHttp用的是sink和source,这两个是在Okio这个开源库里的, feredSink(支持缓冲)、GzipSink(支持Gzip压缩)、ForwardingSink和InflaterSink(后面这两者服务于GzipSink)
7,多个相同host和port的stream可以共同使用一个socket,而RealConnection就是处理连接的,那也就是说一个RealConnection上可能有很多个Stream
8,OkHttp代码比HttpURLConnection精简的多