不允许到我的本地主机的明文 HTTP 流量

Posted

技术标签:

【中文标题】不允许到我的本地主机的明文 HTTP 流量【英文标题】:Cleartext HTTP traffic to my localhost is not permitted 【发布时间】:2020-05-22 05:32:15 【问题描述】:

我正在使用 Volley 向我的本地主机上的地址发送 GET 请求,但它失败并出现错误:

Cleartext HTTP traffic to 192.168.1.45 not permitted

我按照这里的指南进行操作:android 8: Cleartext HTTP traffic not permitted 并做了以下事情:

创建了网络安全 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">http://192.168.1.45/companyweb/greetings</domain>
    </domain-config>
</network-security-config>

将其添加到我的清单中并允许明文流量:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.omerfaran.myudemyapp">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true"

我仍然遇到同样的错误。从“http”更改为“https”会出现此错误:

socket failed: EPERM (Operation not permitted)

我在 MainActivity 中的代码:

val url = "http://192.168.1.45/companyweb/greetings"
val rq = Volley.newRequestQueue(this)
val sr = StringRequest(Request.Method.GET, url, Response.Listener  response ->
    fragmentText.text = response
    Log.d("TAG", "success")
, Response.ErrorListener  error -> Log.d("TAG", "fail" + error.toString()) )
rq.add(sr)

接下来我能做什么?

【问题讨论】:

192.168.1.45 不是本地主机 但这是我的 IP 不是吗?该网址在我的浏览器中有效 什么是“我的”IP?每个设备都有自己的 ip。个人电脑、安卓设备、笔记本电脑……那么你在说什么?什么是“我的”浏览器?在每台设备上都可以运行一个或多个浏览器。所以你说的是哪一个? 【参考方案1】:

我在最近的一个项目中遇到了类似的问题,尝试添加:

android:usesCleartextTraffic="true"

到您的 AndroidManifext.xml 文件中的应用程序标签下。

【讨论】:

【参考方案2】:

我在这里找到了答案: java.net.SocketException: socket failed: EPERM (Operation not permitted)

显然我必须重新启动模拟器(或卸载应用程序)

【讨论】:

【参考方案3】:

您应该只包括 IP 地址,即:

<domain includeSubdomains="true">192.168.1.45</domain>

【讨论】:

它不起作用,当我尝试时出现错误:java.net.SocketException: socket failed: EPERM (Operation not allowed) 我觉得和把http改成https是一样的? 哦,我找到了答案,我只好重启模拟器了......你的建议是对的,在这种情况下它实际上与更改为https相同,谢谢

以上是关于不允许到我的本地主机的明文 HTTP 流量的主要内容,如果未能解决你的问题,请参考以下文章

Android N 预览版中不允许到 myserver.com 的明文 HTTP 流量

如何解决 Android P DownloadManager 因“不允许到 127.0.0.1 的明文 HTTP 流量”而停止?

不允许使用明文HTTP流量到192.168.1.2

尽管添加了 android:usesCleartextTraffic 和 android:networkSecurityConfig,但不允许明文 HTTP 流量

在 Charles [mac] 中无法看到来自/到我的 NodeJS 应用程序的 http 流量

Google Play 发布前报告安全漏洞,表明所有域都允许明文流量