介绍
HttpURLConnection类是位于java.net
包下继承了URLConnection类的一个抽象类,每个 HttpURLConnection 实例都用于发出单个请求。
URL
HttpURLConnection的使用需要依赖URL类,URL类位于java.net
包下,有很多种构造方法。
HttpURLConnection
设置网络权限
在AndroidManifest.xml文件的添加<manifest>
标签下<uses-permission android:name="android.permission.INTERNET" />
允许通过HTTP访问网络资源
通过修改 AndroidManifest.xml 文件来临时允许明文 HTTP 流量。
可以测试http://www.httpbin.org/get
这个网站
测百度https://www.baidu.com/
<applicationandroid:usesCleartextTraffic="true"... >...
</application>
GET 请求
Button GET = findViewById(R.id.button);
GET.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {@Overridepublic void run() {try {// 指定urlString url_baidu = "https://www.baidu.com/";// 创建url对象URL url = new URL(url_baidu);// 创建连接对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方式connection.setRequestMethod("GET");// 建立连接,不发送数据connection.connect();// 获取响应码int responseCode = connection.getResponseCode();if(responseCode == HttpURLConnection.HTTP_OK) {InputStream inputStream = connection.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));String inputLine;StringBuilder content = new StringBuilder();while ((inputLine = in.readLine()) != null) {content.append(inputLine);}// 关闭流in.close();// 更新UI,必须在主线程runOnUiThread(new Runnable() {@Overridepublic void run() {Log.d("Response:", content.toString());// 你也可以用Toast显示结果// Toast.makeText(getApplicationContext(), content.toString(), Toast.LENGTH_LONG).show();}});} else {Log.d("Response:", "Request failed with code: " + responseCode);}connection.disconnect();} catch (Exception e) {// 记录异常Log.e("Error", "Exception: " + e.getMessage(), e);}}}).start();}
});
POST请求
Button POST = findViewById(R.id.button2);POST.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {@Overridepublic void run() {try {String url_example = "https://www.httpbin.org/forms/post";URL url = new URL(url_example);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");connection.setDoOutput(true);connection.setDoInput(true);String postData = "comments=555&custemail=111@111&custname=111&custtel=111&delivery=&size=small&topping=cheese&topping=onion";OutputStream outputStream = connection.getOutputStream();outputStream.write(postData.getBytes(StandardCharsets.UTF_8));outputStream.flush();outputStream.close();int responseCode = connection.getResponseCode();if(responseCode==HttpURLConnection.HTTP_OK){InputStream inputStream = connection.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));String inputLine;StringBuilder content = new StringBuilder();while ((inputLine=in.readLine())!=null){content.append(inputLine);}in.close();Log.d("Response",content.toString());}else{Log.d("Response:","Request failed with code: " + responseCode);}connection.connect();} catch (Exception e) {throw new RuntimeException(e);}}}).start();}});