005.MAUI_APP 绕开https安全策略

Android系统内部自带网络安全策略,会对app的网络请求进行安全认证,默认会自动阻拦内网http访问方式,可通过修改脚本或引入http包进行内网穿透,绕开安全策略.改写脚本的方式比较麻烦,但权限极高,引入http包的方法实现起来非常简单,但会有意想不到的异常.最好两种方法一起用,彻底解锁系统安全锁,

(方法一),脚本改写方式绕开安全策略

一,新建一个测试工程

1. 将原来控件删除,装入一个image控件

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp2.Views.HomePage"
             Title="HomePage">
    <VerticalStackLayout>
        <Image Source="https://media.interflora.co.uk/i/interflora/anthurium2" VerticalOptions="Center"/>
    </VerticalStackLayout>
</ContentPage>

2. 通过谷歌浏览器搜索图片,可将一张图片的的地址复制到uri中,就是这个链接

"https://media.interflora.co.uk/i/interflora/anthurium2" 

默认的app是禁止软件绕开安全策略进行http网络请求的,只能通过https请求,这对于开发来说非常麻烦

3. 设置项目的脚本,使软件绕开安全策略

3.1 在项目文件中找到这个安卓配置脚本,用记事本打开,加上http请求策略,找AndroidManifest文件,

android:usesCleartextTraffic="true" //关闭http安全锁

3.2找到<application>插入 android:usesCleartextTraffic="true"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
	<application android:allowBackup="true" android:usesCleartextTraffic="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
</manifest>

4. 在ios文件夹下的info.plist文件右键”打开方式”

4.1 选择 xml文本编辑器打开代码

4.2在代码这个位置插入脚本代码,绕开安全策略(红色的是插入进去的脚本)

<array>
<string>arm64</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>UISupportedInterfaceOrientations</key>
<array>

5.保存文件后,app就具有http明文访问权限了,目前只测试了图片的请求,还没有确定其他的有没有问题

⦁ 使用http明文获取不安全网址的图片,并成功请求到了

页面的image控件图片地址改用了http明文模式进行请求,测试能正常访问到了

<Image Source="http://media.interflora.co.uk/i/interflora/anthurium2" VerticalOptions="Center"></Image>

(方法二).引入http进行网络请求

一.安装这个http依赖包

二在按键事件中新建一个http客户端对象

 private void btu1_Clicked(object sender, EventArgs e)
 {
     var httpClient = new HttpClient();//建立http客户端对象
 }

上面这种函数会导致系统崩溃的,因为他是同步方法进行网络请求,系统只开辟了一个线程进行工作,处理多任务时就会卡死.需要对按键方法进行改写,使其利用异步的方法发起网络请求

1.异步发起网络请求(报文以text格式)

GetAsync()这种方法只能请求简易string接口,接收json数据的话会出错

完整代码如下:

 private async void btu1_Clicked(object sender, EventArgs e)
 {
     var httpClient = new HttpClient();//建立http客户端对象
     
     var response= await httpClient.GetAsync("http://159.75.139.159:80/api/esp32/1");//异步方法get括号内填想访问的网址 string类型请求
     
     var data =await response.Content.ReadAsStringAsync();//读取响应内容

     btu1.Text=data;//读取的内容赋值给按钮文本
 }

当然,这个网址是我自己的做的后台服务器,他的内容正好和我的app匹配,如果是别的服务器,你可能会请求到乱七八糟,或者错误的数据(这个服务器是我自己测试用,随时可能被我删掉,你请求不到也正常)

成功GET到服务器api接口,并读取了data数据"ok"写到软件上了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值