我正在处理将POST数据发送到服务器的Phonegap应用程序。该代码适用于iOS,运行Android 4.4.4的Nexus 5以及桌面上的不同浏览器。然而,我在运行Android 4.2.2的目标设备Galaxy Trend Plus以及Android 4.2.2,4.3和4.4.2的仿真器上获得NodeJS上的未授权,http基本身份验证。
-Phonegap version 3.5.0-0.21.014
-jquery-1.10.2.min.js
-jquery.mobile-1.4.2.min.js
发送数据的代码,此时由一个按钮触发
function sendData(){
var url = 'http://somethingsomething.com/addData'
var msg= {
'userID':localStorage.getItem('id'),
'userName':localStorage.getItem('name'),
'log':localStorage.getItem('log')
};
var result = $('#result');
result.html('POST to: ' + url)
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(msg),
username: 'asdf',
password: 'asdf',
xhrFields:{withCredentials: true},
contentType: 'application/json',
satusCode:{ 200: function(){ result.html('POST success!') } },
success: function(data, textStatus, jqXHR) { result.html('Success : ' + data) },
error: function(jqXHR, textStatus, errorThrown) { result.html('Error: '+ jqXHR.readyState + ' ' + errorThrown); }
});
}
从浏览器和Nexus发送的标头是相同的:
Request URL:http://asdf:asdf@somethingsomething.com/addData
Request Method:POST
Status Code:200 OK
Request Headers CAUTION: Provisional headers are shown.
Accept:*/*
Content-Type:application/json
Origin:file://
User-Agent:Mozilla/5.0 (Linux; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36
Request Payloadview source
{userID:57, userName:NEXUS,…}
log: "...deleted..."
userID: "57"
userName: "NEXUS"
Response Headers
Accept-Ranges:none
Access-Control-Allow-Headers:X-Requested-With, Content-Type
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Type:text/plain
Date:Mon, 20 Oct 2014 08:10:59 GMT
Keep-Alive:timeout=15, max=99
Transfer-Encoding:chunked
X-Powered-By:Express
我知道一切正常,数据将被发送并保存在服务器上。问题仅在于运行android 4.2.2的Galaxy TrendPlus。 Chromes检查设备无法使用它,所以我真的无法调试它。除了可能通过我的计算机(Ubuntu)管道流量并监控它?
非常感谢任何和所有的帮助/想法,谢谢!
增加:
我能想到的任何差异应该与所使用的浏览器有关,所以我检查了navigator.userAgent
Trend Plus:Mozilla / 5.0 AppleWebKit / 534.30 Safari / 534.30
Nexus 5:Mozilla / 5.0 AppleWebKit / 537.36 Chrome / 37.000 Mobile Safari / 537.36
ubuntu上的Chromium:Mozilla / 5.0 AppleWebKit / 537.36 Ubuntu Chromium(37.0.2062.120 Chrome / 37.0.2062.120 Safari / 537.36
增加:
好的,我在Android Eclipse SDK中运行了代码,并在尝试发送数据时从运行Android 4.2.2的Trend上的LogCat中获取了这些代码。 Nexus似乎没有向LogCat输出任何东西。
external/chromium/net/socket/ssl_client_socket_openssl.cc:300: [1021/132507:INFO:ssl_client_socket_openssl.cc(300)] [cac_debug_log][ssl_client_socket_openssl.cc] GetInstance() cac_sata_: 0 CAC_CONTEXT_CAC: 3
external/chromium/net/socket/ssl_client_socket_openssl.cc:[1021/132507:INFO:ssl_client_socket_openssl.cc(10)] ssl_ctx_ is used
external/chromium/net/socket/ssl_client_socket_openssl.cc:[1021/132507:INFO:ssl_client_socket_openssl.cc(512)] ~SSLClientSocketOpenSSL()
澄清:连接是通过SSL连接的,必须使用httpBasicAuth验证POST。 Haven对这些消息的含义有所了解。谷歌把我带到https://code.google.com/p/chromium/issues/detail?id=166746这些类型的页面,这些页面没有帮助。