我遇到的问题是我的应用可以从iOS simulator
访问API,但它不在Android emulator
上。
我这样称呼API:
async fetchData() {
let url = `http://1**.***.***.***/bla/bla`;
try{
let response = await fetch(url,{
headers: {
'x-application-id':'123',
'hashing': this.hashGenerator("message"),
'content-type': 'application/json'
},
method: "POST",
body: JSON.stringify({
"location":"city"
})
});
if(!response.ok){
throw new Error(response.status)
} else {
return await response.json();
}
} catch(error) {
this.setState({ loadingList: false });
}
}
是因为我使用http
代替https
吗?
我从昨天起就被困住了......
答案 0 :(得分:0)
对于http
请求,需要进行证书签名。您可以使用以下代码来信任您的应用程序的所有证书。由于您的应用仅使用您的服务器,因此使用此代码不会出现任何安全问题。
public void trustAllCertificates() {
try {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] myTrustedAnchors = new X509Certificate[0];
return myTrustedAnchors;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
} catch (Exception e) {
}
}
只需在Application
课程或主Activity
中调用此功能。