1. 使用HttpURLConnection
- 获取到HttpURLConnection实例
一般通过new一个URL对象并传入目标网络地址,然后调用openConnection方法获取到实例
URL url = new URL("https://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- 设置http请求使用的方法 (根据官方文档使用方法似乎发生变化,未实践)
-GET:表示希望从服务器获得数据connection.setRequestMethod("GET");-POST:表示希望提交数据给服务器connection.setRequestMethod("POST");
- 默认是从服务器获得数据。
- 如果想要上传数据需要调用
connection.setDoOutput(true);
配置输出流,然后通过getOutputStream方法获取输出流,接下来书写内容
官方示例:
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
writeStream(out);
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
} finally {
urlConnection.disconnect();
}
- 设置连接超时时间、读取超时时间等
//设置连接超时为x毫秒
connection.setConnectTimeout(8000);
//设置读取超时为x毫秒
connection.setReadTimeout(8000);
- 通过getInputStream方法获得输入流,然后读取输入流
InputStream in = connection.getInputStream();
- 关闭连接
connection.disconnect();
示例
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
//设置http请求目标信息并获取HttpURLConnection实例
URL url = new URL("https://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
//设置http请求使用的方法为GET(或者是POST)
//connection.setRequestMethod("GET");
connection.setDoOutput(true);
//设置连接超时为x毫秒
connection.setConnectTimeout(8000);
//设置读取超时为x毫秒
connection.setReadTimeout(8000);
//通过getInputStream方法获取服务器返回的输入流
InputStream in = connection.getInputStream();
//读取输入流
reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while((line = reader.readLine())!= null){
response.append(line);
}
//使用自定义方法将输入流显示出来
showResponse(response.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(connection!=null){
//关闭连接
connection.disconnect();
}
}
2. 使用OkHttp
OkHttp是一个开源的项目,项目主页https://github.com/square/okhttp
使用这个开源项目需要在build.gradle文件中添加implementation(“com.squareup.okhttp3:okhttp:4.2.1”)用于导入需求的包
- 获取OkHttpClient实例用于执行request操作
OkHttpClient client = new OkHttpClient();
- 构建request,可以通过多种连缀方法丰富这个Request对象
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
- 调用OkHttpClient的newCall方法创建一个Call对象,然后调用它的execute方法发送请求并获取服务器返回的数据
//使用newCall方法执行request操作,同时使用Response实例存储数据
Response response = client.newCall(request).execute();
关于POST
先构建一个RequestBody对象来存储数据,然后在构建request对象时通过post连缀方法将构建好的RequestBody对象传入,接下来发送请求就会将构建好的数据上传
//构建RequestBody对象存储要发送的数据
RequestBody requestBody = new FormBody.Builder()
.add("name", "admin")
.add("password", "123456")
.build();
//构建request
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(requestBody)
.build();
示例
try {
//获取OkHttpClient实例用于执行request操作
OkHttpClient client = new OkHttpClient();
//构建RequestBody对象存储要发送的数据
RequestBody requestBody = new FormBody.Builder()
.add("name","admin")
.add("password","123456")
.build();
//构建request
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(requestBody)
.build();
//使用newCall方法执行request操作,同时使用Response实例存储数据
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showResponse(responseData);
} catch (IOException e) {
e.printStackTrace();
}