我正在尝试调用fetch()
函数。
它适用于iOS但不能在Android上运行。
fetch('https://admin.leanpoint.com/Api/User/Login?user=srinu@mainpoint.dk', {
method: 'POST',
headers: {
'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
},
})
.then((res) => {
res.json().then((json) => {
alert(JSON.stringify(json))
})
})
.catch((err) => {
alert(JSON.stringify(err))
})
在iOS上,它会输入.then()
但在Android上输入.catch()
而err
为{}
。
它也不适用于仿真器和真实设备。
感谢任何帮助。 ^ _ ^
使用Axios的错误日志
当我使用fetch()
时,它会使用{}输入.catch()
。
我尝试使用Axios
,如下所示。
axios.post('https://admin.leanpoint.com/Api/User/Login?user=srinu@mainpoint.dk', null, {
headers: {
'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
},
timeout: 2000
})
.then((res) => {
console.log(res.data)
})
.catch((err) => {
console.log(err)
})
它会返回如下错误。
{ [Error: Network Error]
config:
{ adapter: [Function: xhrAdapter],
transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
timeout: 2000,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
headers:
{ Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/x-www-form-urlencoded',
Authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
method: 'post',
url: 'https://admin.leanpoint.com/Api/User/Login?user=srinu@mainpoint.dk',
data: null },
request:
{ UNSENT: 0,
OPENED: 1,
HEADERS_RECEIVED: 2,
LOADING: 3,
DONE: 4,
readyState: 4,
status: 0,
timeout: 2000,
withCredentials: true,
upload: {},
_aborted: false,
_hasError: true,
_method: 'POST',
_response: 'java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.',
_url: 'https://admin.leanpoint.com/Api/User/Login?user=srinu@mainpoint.dk',
_timedOut: false,
_trackingName: 'unknown',
_incrementalEvents: false,
responseHeaders: undefined,
_requestId: null,
_cachedResponse: undefined,
_headers:
{ accept: 'application/json, text/plain, */*',
'content-type': 'application/x-www-form-urlencoded',
authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
_responseType: '',
_sent: true,
_lowerCaseResponseHeaders: {},
_subscriptions: [] },
response: undefined }
答案 0 :(得分:4)
这项工作, android \ app \ src \ main \ AndroidManifest.xml
<application
......
android:usesCleartextTraffic="true"
......>
答案 1 :(得分:1)
第二个日志指向您的错误。问题是SSL证书。有关解决方案,请参阅此文章:
答案 2 :(得分:1)
我已使用以下解决方案解决了这个问题。
在Android 9(Pie)中,我们需要将 networkSecurityConfig 设置为AndroidManifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
现在在 value / xml 文件夹中创建一个名称为 network_security_config.xml 的新xml资源文件。此配置适用于应用程序的基本配置或默认安全配置,并禁用所有明文流量。
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">172.16.33.1</domain>
</domain-config>
</network-security-config>
有关更多信息,请检查以下链接
https://codelabs.developers.google.com/codelabs/android-network-security-config/#3
https://developer.android.com/training/articles/security-config
https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
答案 3 :(得分:1)
这对我有用
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application android:usesCleartextTraffic="true" tools:targetApi="28" />
答案 4 :(得分:0)
“我是蝙蝠侠”提出了使用Axios的好建议。 Axios有很多更简单,并且发现它们在ios / android上都能保持一致,而不是使用这些奇怪的错误。以下是直接从其github发出POST请求的示例:
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
答案 5 :(得分:0)
你可以在异常回溯中看到java CertPathValidatorException
阻止网络请求并检查与android相关的this答案
答案 6 :(得分:0)
由于@mohsenomidi,此错误是由于http请求而发生的。将此行添加到AndroidManifest.xml
中的android:usesCleartextTraffic="true"
至<application/>
<manifest xmlns:tools="http://schemas.android.com/tools"> ....
<application
android:usesCleartextTraffic="true" > ...
</application>
</manifest>
https://github.com/facebook/react-native/issues/24627#issuecomment-492159371
答案 7 :(得分:0)
如果您在互联网连接图标附近看到<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview8.19405.11" />
,则可能是由于Android模拟器中的互联网问题所致。然后,您应该将网络的DNS地址更改为8.8.8.8。您应该看到此答案以了解如何:https://stackoverflow.com/a/49332186/6170191