android | 网络权限 | http请求相关
无法使用https的情况下允许http请求,在Manifest.xml中加上:
android:usesCleartextTraffic="true"
要记得申请权限:
<uses-permission android:name="android.permission.INTERNET"/>
参考:https://blog.csdn.net/weixin_30877755/article/details/99263427
自己封装的http请求类:
package com.vnctf2022.cm1.utils;
// 这个类是Mz1封装的http请求类
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
public class MzHttp {
private String url; // 请求的url
public String text; // 请求的结果
public byte[] content; // 请求的结果
public HashMap<String, String> params; // 请求参数(post)
// 构造方法
public MzHttp(String url){
this.url = url;
params = new HashMap<String, String>(); // 初始化param表
}
// 获取字节数组类型
public byte[] getContent() {
return content;
}
// 获取文本类型
public String getText() {
this.text = new String(this.content); // 转化为utf8字符串
return text;
}
// 用于读取Stream数据
private byte[] read(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; // 一次读取1024bytes
int len = 0;
while((len = inStream.read(buffer)) != -1)
{
outStream.write(buffer,0,len);
}
inStream.close();
return outStream.toByteArray();
}
// 发送get请求
public void get(){
try {
//System.out.println("get ok");
URL url = new URL(this.url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置连接超时为5秒
conn.setConnectTimeout(5000);
// 设置请求类型为Get类型
conn.setRequestMethod("GET");
// 判断请求Url是否成功
if (conn.getResponseCode() != 200) {
throw new RuntimeException("请求url失败");
}
InputStream inStream = conn.getInputStream();
this.content = this.read(inStream); // 将变量保存到content下来
inStream.close();
}catch (Exception e){
// 异常处理
e.printStackTrace();
}
}
// 发送post请求
// 默认情况下是x-www-form-urlencoded
public void post(HashMap<String, String> params) {
//System.out.println("post ok");
try{
HttpURLConnection conn = (HttpURLConnection) new URL(this.url).openConnection();
//设置请求方式,请求超时信息
conn.setRequestMethod("POST"); // 创建post请求
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
//设置运行输入,输出:
conn.setDoOutput(true);
conn.setDoInput(true);
//Post方式不能缓存,需手动设置为false
conn.setUseCaches(false);
//我们请求的数据:
//String data = "passwd="+ URLEncoder.encode(passwd, "UTF-8")+
// "&number="+ URLEncoder.encode(number, "UTF-8");
String data = "";
for (String key: params.keySet()) {
data += key+"="+URLEncoder.encode(params.get(key), "UTF-8")+"&"; // 循环创建请求数据
}
System.out.println(data);
//这里可以写一些请求头的东东...
//获取输出流
OutputStream out = conn.getOutputStream();
out.write(data.getBytes());
out.flush();
if (conn.getResponseCode() == 200) {
InputStream inStream = conn.getInputStream();
this.content = this.read(inStream); // 将变量保存到content下来
inStream.close();
}else{
// 处理一下
}
}catch (Exception e){
}
}
// 发送post请求
// 重载
public void post(String data) {
//System.out.println("post ok");
}
// 测试
public static void main(String[] args) {
MzHttp mzhttp = new MzHttp("https://mz1.top");
HashMap<String, String> param = new HashMap<String, String>();
param.put("uname", "Mz1");
param.put("passwd", "123456");
param.put("phone_num", "13337823843");
//mzhttp.get();
mzhttp.post(param);
System.out.println(mzhttp.getText());
}
}
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/15224997.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com