发生一个或多个错误。 (无法解析 TLS 数据包 header)C# Xamarin Android 项目 Visual Studio
One or more errors occurred. (Unable to parse TLS packet header) C# Xamarin Android Project Visual Studio
当我为 API 服务器使用 http url 时,我收到错误:
Message "One or more errors occurred. (Cleartext HTTP traffic to 194.141.118.43 not permitted)"
当我将 https 放在 API 服务器的 url 上时,我收到错误消息:
Message "One or more errors occurred. (Unable to parse TLS packet header)"
我的RestServiceData
class看起来像:
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using MaritsaTundzhaForecast.Models;
using Newtonsoft.Json;
namespace MaritsaTundzhaForecast.Services
{
public class RestServiceData
{
HttpClient _client1;
HttpClient _client2;
public RestServiceData()
{
_client1 = new HttpClient();
_client2 = new HttpClient();
}
public WaterBindingData GetWaterDataForecast(string query, string query2)
{
WaterDataJson waterData = new WaterDataJson();
WaterStationsJson waterStations = new WaterStationsJson();
WaterBindingData result = new WaterBindingData();
try
{
var task = Task.Run(() => _client1.GetAsync(query));
task.Wait();
var response = task.Result;
var task2 = Task.Run(() => _client2.GetAsync(query2));
task2.Wait();
var response2 = task2.Result;
if (response.IsSuccessStatusCode && response2.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
var content2 = response2.Content.ReadAsStringAsync().Result;
var json = content2.Replace("\"ardaforecast\":[[", "\"ardaforecast\":[ {\"items\": [")
.Replace("}],{\"fieldCount\"", "}],\"details\":{\"fieldCount\"")
.Replace("}]}", "}}]}");
waterData = JsonConvert.DeserializeObject<WaterDataJson>(content2);
waterStations = JsonConvert.DeserializeObject<WaterStationsJson>(content);
result.WaterData = waterData;
result.WaterStation = waterStations;
}
}
catch (Exception ex)
{
Debug.WriteLine("\t\tERROR {0}", ex.Message);
}
return result;
}
}
}
这是我的 Constants
class:
using System;
using System.IO;
namespace MaritsaTundzhaForecast
{
public static class Constants
{
public static string EndPoint = "https://194.141.118.43:3001/";
}
}
如何解决此错误?
如果您的网站没有任何证书配置,请将https
更改为http
。
设置为允许 http 请求。
在你的xxx.Android->属性->AndroidManifest.xml中添加:android:usesCleartextTraffic="true"
.
如果以上方法不行,在你的文件夹下新建一个xml文件夹
Resources 文件夹并添加 network_security_config.xml 文件。添加
代码:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
</network-security-config>
在你的xxx.Android->属性->AndroidManifest.xml中添加:
android:networkSecurityConfig="@xml/network_security_config"
如果你想使用http请求,你应该在AndroidManifest.xml中的应用程序标签中添加android:usesCleartextTraffic="true"
,它只在API 23级及更高级别使用(这是足够测试)。
你应该在线使用 https 请求,你需要一个域名,并且 https 将在你的服务器中使用 443 端口。通常需要Nginx或者Apache监听443连接自己的服务器。
当我为 API 服务器使用 http url 时,我收到错误:
Message "One or more errors occurred. (Cleartext HTTP traffic to 194.141.118.43 not permitted)"
当我将 https 放在 API 服务器的 url 上时,我收到错误消息:
Message "One or more errors occurred. (Unable to parse TLS packet header)"
我的RestServiceData
class看起来像:
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using MaritsaTundzhaForecast.Models;
using Newtonsoft.Json;
namespace MaritsaTundzhaForecast.Services
{
public class RestServiceData
{
HttpClient _client1;
HttpClient _client2;
public RestServiceData()
{
_client1 = new HttpClient();
_client2 = new HttpClient();
}
public WaterBindingData GetWaterDataForecast(string query, string query2)
{
WaterDataJson waterData = new WaterDataJson();
WaterStationsJson waterStations = new WaterStationsJson();
WaterBindingData result = new WaterBindingData();
try
{
var task = Task.Run(() => _client1.GetAsync(query));
task.Wait();
var response = task.Result;
var task2 = Task.Run(() => _client2.GetAsync(query2));
task2.Wait();
var response2 = task2.Result;
if (response.IsSuccessStatusCode && response2.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
var content2 = response2.Content.ReadAsStringAsync().Result;
var json = content2.Replace("\"ardaforecast\":[[", "\"ardaforecast\":[ {\"items\": [")
.Replace("}],{\"fieldCount\"", "}],\"details\":{\"fieldCount\"")
.Replace("}]}", "}}]}");
waterData = JsonConvert.DeserializeObject<WaterDataJson>(content2);
waterStations = JsonConvert.DeserializeObject<WaterStationsJson>(content);
result.WaterData = waterData;
result.WaterStation = waterStations;
}
}
catch (Exception ex)
{
Debug.WriteLine("\t\tERROR {0}", ex.Message);
}
return result;
}
}
}
这是我的 Constants
class:
using System;
using System.IO;
namespace MaritsaTundzhaForecast
{
public static class Constants
{
public static string EndPoint = "https://194.141.118.43:3001/";
}
}
如何解决此错误?
如果您的网站没有任何证书配置,请将
https
更改为http
。设置为允许 http 请求。
在你的xxx.Android->属性->AndroidManifest.xml中添加:
android:usesCleartextTraffic="true"
.如果以上方法不行,在你的文件夹下新建一个xml文件夹 Resources 文件夹并添加 network_security_config.xml 文件。添加 代码:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"/> </network-security-config>
在你的xxx.Android->属性->AndroidManifest.xml中添加:
android:networkSecurityConfig="@xml/network_security_config"
如果你想使用http请求,你应该在AndroidManifest.xml中的应用程序标签中添加android:usesCleartextTraffic="true"
,它只在API 23级及更高级别使用(这是足够测试)。
你应该在线使用 https 请求,你需要一个域名,并且 https 将在你的服务器中使用 443 端口。通常需要Nginx或者Apache监听443连接自己的服务器。