很多app都涉及到使用HTTP协议访问网络,接下来就介绍几种Android上发送HTTP请求的方法。
最初,Android上发送HTTP一般有两种方式,一种是HttpURLContction和HttpClient。由于HttpClient存在很多弊端,所以在Android 6.0以后便被废除了。
HttpURLConnection的用法:
首先需要获取HttpURLConnect的实例,接着new一个URL对象并传入网址,然后调用URL对象的openConnection()方法。
URL url=new URL(“https://www.baidu.com“);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
获取HttpURLConnection之后,通过调用setRequsetMethod()方法来设置HTTP请求的方式。GET表示从服务器中获取数据,POST表示提交数据给服务器。
connection.setRequestMethod(“GET”);
除此之外,还可以通过一些方法设置连接超时、读取超时的毫秒数。setConnectTimeout()设置连接超时毫秒数,setReadTimeout()设置读取超时毫秒数。
connection.setConnectTimeout(1000);
connection.setReadTimeout(1000);
通过调用getInputStream()方法可以获取到服务器返回的输入流。
InputStream in=connection.getInputStream();
若HTTP请求方式为POST的话,需要在获取输入流之前把要提交的数据写入。每条数据已键值对的形式存在,数据之前用&隔开。
connection.setRequestMethod(POST”);
DataOutputStream out=new DataOutputStream(connection.getOutputStream);
out.writeBytes(“username=admin&password=123456”);
最终通过调用disconnect()方法将HTTP连接关闭。
connection.disconnect();
OkHttp的用法:
OkHttp目前已经成为开发者首选的网络通信库。项目地址:https://github.com/square/okhttp
首先需要在app/build.gradle中添加库依赖:
compile ‘com.squareup.okhttp3:okhttp:3.8.1’ 版本号可以自己去官网查。
首先new一个OkHttpClient对象,如要发送HTTP请求就需要创建一个Request对象并通过url()方法设置网址。
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url(“https://www.baidu.com").build();
之后调用OkHttpClient的newCall()方法创建一个Call对象,并 调用call对象的execute()方法向服务器发送请求并获取到服务器返回的数据。
Response response=client.newCall(request).execute();
Response对象就是服务器返回的数据,通过body()方法可以获取到返回的具体内容。
String responseData=response.body().toString();
使用OkHttp发送POST请求比GET请求稍微麻烦一点,首先要构建一个RequestBody对象来存放待提交的参数。
RequestBody requestBody=new FormBody.Builder().add(“username”,”admin”).add(“password”,”123456”).build();
其中add()方法第一个参数是一个键值。
接着在刚刚创建Request对象的时候调用post()方法 ,并将RequestBody对象传入。
Request request=new Request.Builder().url(“https://www.baidu.com").post(requestBody).build();
最后跟GET请求一样,通过调用execute()方法像服务器发送请求并获取服务器返回的数据。