一.使用HttpURLConnection
①首先获取HttpURLConnection的实例
URL url = new URL("https://www.baidu.com");
connection = (HttpURLConnection)url.openConnection();
②在得到HttpURLConnection的实例后,可以设置HTTP请求所使用的方法。常用的方法主要有两个:GET和POST。GET表示从服务器那里获取数据,POST则是将数据提交给服务器。
connection.setRequestMethod("GET");
③自由定制
// 设置是否使用缓存
connection.setUseCaches(true);
// 设置此 HttpURLConnection 实例是否应该自动执行 HTTP 重定向
connection.setInstanceFollowRedirects(true);
// 设置超时时间
connection.setConnectTimeout(3000);
④利用getInputStream()方法获取输入流,然后读取
InputStream in =connection.getInputStream();
⑤关闭HTTP连接
if(connection != null){
connection.disconnect();
}
⑥完整Activity代码
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpActivity extends AppCompatActivity implements View.OnClickListener {
TextView mtx;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.http);
Button btn = findViewById(R.id.button2);
mtx = findViewById(R.id.textView);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.button2){
sendRequstHttp();
}
}
private void sendRequstHttp() {
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader reader = null;
try{
URL url = new URL("https://www.baidu.com");
connection = (HttpURLConnection)url.openConnection();
/* connection.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");向服务器传值*/
//请求方式
connection.setRequestMethod("GET");
//连接超出时间
connection.setConnectTimeout(8000);
//获取内容超时
connection.setReadTimeout(8000);
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 (Exception e){
e.printStackTrace();
}finally {
if(reader != null){
try {
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(connection != null){
connection.disconnect();
}
}
}
}).start();
}
private void showResponse(final String response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mtx.setText(response);
}
});
}
}
完整xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</LinearLayout>
需要在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.INTERNET" />
二.使用OkHttp
①首先在app/build.gradle文件中的dependencies闭包添加如下内容
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
②然后创建一个OkHttpClient的实例
OkHttpClient client = new OkHttpClient();
③创建一个Request对象
Request request = new Request.Builder().url("https://www.baidu.com").build();
④调用OkHttpClient的newCall方法来创建一个Call对象,并调用它的execute()方法来发生请求并获取服务器返回的数据
Response response = client.newCall(request).execute();
⑤用如下方法获取具体内容
String responseData = response.body().string();
使用POST请求
如果发起一条POST请求,首先构建一个RequestBody对象来存放代提交的参数
RequestBody requestBody = new FormBody.Builder().add("1","1").build();
然后在Request.Builder中调用post()方法,并将RequestBody对象传入
Request request = new Request.Builder().url("https://www.baidu.com").post(requestBody).build();
具体代码如下
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class OkHttpActivity extends AppCompatActivity implements View.OnClickListener {
TextView mtx;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.http);
Button btn = findViewById(R.id.button2);
mtx = findViewById(R.id.textView);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.button2){
sendRequestOkHttp();
}
}
private void sendRequestOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
/* RequestBody requestBody = new FormBody.Builder().add("1","1").build();
Request request = new Request.Builder().url("https://www.baidu.com").post(requestBody).build();*/
Request request = new Request.Builder().url("https://www.baidu.com").build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showResponse(responseData);
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mtx.setText(response);
}
});
}
}