从Android 9 Pie开始,没有加密的请求永远不会起作用.默认情况下,系统会指望您默认使用TLS.您可以在此处阅读此功能因此,如果您只通过HTTPS发出请求,那么您就是安全的.但是那些通过不同网站提出请求的应用程序呢,例如类似浏览器的应用程序.
如何在Android 9 Pie中启用对HTTP和HTTPS的所有类型连接的请求?
java android kotlin android-network-security-config android-9.0-pie
我无法弄清楚如何从Genymotion android模拟器访问localhost.顺便说一句,我使用MAMP.
我工作的一个应用程序为其(功率)的用户必须建立自己的服务器(即Nginx的)运行的后台程序.需要在应用程序中配置相应的域才能连接.我一直在测试我自己的手机(索尼z3c)并开始开发5.1.后来我收到了6.0的更新,但仍在模拟器中维护了一个工作5.1.不久前,我开始研究带有7.0图像的AVD,我很惊讶它不会连接到我的服务器,告诉我ssl握手失败了.我的nginx配置非常严格,但它适用于5.1和6.0,所以......?!
这就是我所知道的:
如果没有TLSSocketFactory,则通过裸实请求队列进行请求,实例化为Volley.newRequestQueue(context).
这是我在android studio中看到的:
W/System.err: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer
W/System.err: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
W/System.err: Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer
W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
W/System.err: at com.android.okhttp.Connection.connectTls(Connection.java:235)
W/System.err: at com.android.okhttp.Connection.connectSocket(Connection.java:199)
W/System.err: at com.android.okhttp.Connection.connect(Connection.java:172)
W/System.err: at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
W/System.err: at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:257)
W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
W/System.err: …Run Code Online (Sandbox Code Playgroud) ssl android elliptic-curve sslhandshakeexception android-7.0-nougat
我们通常在url中使用10.0.2.2 :(端口号)连接到本地Web服务器,但是我们应该使用计算机的ip地址而不是10.0.2.2
那为什么我们使用10.0.2.2?
我浪费了一整天的时间尝试在SO和其他提到的地方漂浮的不同解决方案,以便在Android模拟器上启用wifi,但无济于事.任何人都可以帮我弄清楚如何在我的Android模拟器上启用互联网?
我有Nexus 5X API 27,目标是Android 8.1(Google Play)和Nexus 5 API P,目标是Android 7.1.1.
我相信应该有一种方法来启用互联网,否则在模拟器上提供虚拟wifi的重点似乎是浪费.
我在mac OS HS 10.13.4上直接连接到没有代理的路由器.
我甚至尝试删除所有avds,重新安装它们.我甚至尝试使用Oreo Android 8.1安装最新的Pixel 2
似乎没有什么工作.有人遇到过这个问题并找到了解决方案吗?
任何帮助都会有很大的帮助
谢谢,维克拉姆
更新:当我通过手机将我的电脑连接为热点wifi时,模拟器通过wifi连接互联网,但是当我将计算机连接到家用路由器时它失败了.
我遇到了以下错误.目前我正在使用React Native开发Android应用程序,因此我计划使用fetch为我做一个post请求.
fetch("https://XXreachable-domainXX.de/api/test", {
method: "post",
body: JSON.stringify({
param: 'param',
param1: 'param',
})
}
)
.then((response) = > response.json()
)
.
then((responseData) = > {
ToastAndroid.show(
"Response Body -> " + JSON.stringify(responseData.message), ToastAndroid.SHORT
)
})
.
catch((error) = > {
console.warn(error);
})
;
Run Code Online (Sandbox Code Playgroud)
该应用程序现在抛出一个错误:
TypeError:网络请求失败
当我将代码更改为GET-Request它工作正常时,在浏览器中使用window.alert()作为返回它很酷,并且chrome扩展Postman正确地返回数据.
我使用外部托管的 Django python 框架创建了一个 API 端点。我可以从浏览器 ( mydomain.com/endpoint/)访问我的端点并验证没有错误。当我在我的开发机器 ( localhost:8000/endpoint/)上本地运行我的测试 django 服务器时,情况也是如此。当我使用我的本地主机作为端点时,我的 json 数据毫无问题地通过。当我使用我的生产域时,axios 遇到了网络错误,并且它提供的上下文并不多......从调试控制台我得到了这个:
Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:87)
at XMLHttpRequest.dispatchEvent (event-target.js:172)
at XMLHttpRequest.setReadyState (XMLHttpRequest.js:554)
at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:387)
at XMLHttpRequest.js:493
at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
at MessageQueue.__callFunction (MessageQueue.js:353)
at MessageQueue.js:118
at MessageQueue.__guardSafe (MessageQueue.js:316)
Run Code Online (Sandbox Code Playgroud)
这是我在 React Native 组件中的 axios 调用:
componentDidMount() {
axios.get('mydomain.com/get/').then(response => { // localhost:8000/get works
this.setState({foo:response.data});
}).catch(error => {
console.log(error);
});
}
Run Code Online (Sandbox Code Playgroud) 我的问题与React Native fetch() Network Request Failed 不同,我并没有在 http 或 https 上挣扎,如果请求由于互联网连接、错误的 API 等而失败,我只想向用户提供一个很好的错误。得到反应本机错误。
我有一个表格,想把它发送到服务器并得到回复,所以我写了这个:
submitForm = async () => {
fetch("www.somewhere.com", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(some_data)
})
.then((response) => response.json())
.then((responseJson) => {
// do something
})
.catch((error) => {
this.setState({server_error: "request failed try again."});
});
};
Run Code Online (Sandbox Code Playgroud)
但似乎我的捕获无法正常工作,因为如果请求失败,我会从 react native 收到如下错误:
而在生产中,它只是跳出应用程序,我该如何避免这种情况?
使用React Native Fetch API时遇到问题。很多次请求失败。我有高速连接。但是很多次失败了。该问题正在android和ios中同时发生。
const shoppingApi = 'myserverlink';
async function Sendshoppinapi(data) {
try {
let response = await fetch(shoppingApi, {
method: 'POST',
headers: {
'Accept': 'application/json',
'content-type':'multipart/form-data'
},
body: data
});
let responseJson = await response.json();
return responseJson;
}
catch (error) {
Alert.alert(error.toString())
}
}
export {Sendshoppinapi};
Run Code Online (Sandbox Code Playgroud)
我发送服务器作为后期请求的数据
add_to_wishlist = (item,index) => {
{
let data = new FormData();
data.append('methodName', 'add_to_wishlist');
data.append('user_id', global.userid)
data.append('item_id', this.props.navigation.state.params.itemid.toString())
Sendshoppinapi(data).then((responseJson)=>{
console.warn(responseJson);
if(responseJson.responseCode == '200'){
this.setState({fav:false})
Alert.alert('SHOPPING','Item added to wishlist successfully.',[{text: 'OK',},],{ cancelable: false }) …Run Code Online (Sandbox Code Playgroud) 我有一张图片.我想使用aws-amplify将其上传到S3.所有Storage类上传示例都使用文本文档; 但是,我想上传一张图片.我正在使用expo,它没有来自react-native-fetch-blob的支持,并且本机反应没有blob支持......
所以我的选择似乎是:
const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
if (status === 'granted') {
const image = await ImagePicker.launchImageLibraryAsync({
quality: 0.5,
base64: true
});
const { base64 } = image;
Storage.put(`${username}-profileImage.jpeg`, base64);
}
它是否正确?
javascript blob amazon-web-services react-native aws-amplify
我正在尝试使用axios从 API 获取数据。
这是我发出 get 请求的代码:
export const loadBloodGroups = () => {
return (dispatch) => {
dispatch({ type: LOADING_BLOOD });
const url = `http://www.example.org/api/bloodgroup/getusersbloodgroup`;
axios.get(url)
.then(response => loadingSuccess(dispatch, response))
.catch(error => loadingFail(dispatch, error));
};
};
const loadingFail = (dispatch, error) => {
console.log(error);
dispatch({
type: LOADING_BLOOD_FAIL,
payload: error
});
};
const loadingSuccess = (dispatch, response) => {
dispatch({
type: LOADING_BLOOD_SUCCESS,
payload: response
});
};
Run Code Online (Sandbox Code Playgroud)
http 的 info.plist 设置:
在android模拟器上可以正常使用,但在IOS模拟器上就不行。
在我的浏览器调试控制台中它显示:
Mac 终端显示:
谁能告诉我,我哪里出错了?或者我需要为IOS做任何其他配置吗?
我的平台:
android ×6
react-native ×6
javascript ×3
axios ×2
fetch ×2
android-network-security-config ×1
android-wifi ×1
aws-amplify ×1
blob ×1
emulation ×1
genymotion ×1
ios ×1
java ×1
kotlin ×1
mamp ×1
reactjs ×1
ssl ×1