项目:Android 版 Adobe Air 连接到 ASP.net。这是AS3代码:
//First login to the server and also grabbing from there ASP_NET_SessionId data (Cookie).
var session:String;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
var request:URLRequest= new URLRequest("https://somedomain.com/someaddress.aspx"); //yes with https
request.data = '{ "Message":"Login", "Data": { "User":"some@email.com", "Password":"somepassword" }}';
request.method = URLRequestMethod.POST;
loader.addEventListener( HTTPStatusEvent.HTTP_RESPONSE_STATUS, httpStatusHandler);
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request);
private function httpStatusHandler(e:HTTPStatusEvent):void
{
for each (var object:Object in e.responseHeaders)
{
if (object.name == "Set-Cookie")
{
var match:Array =object.value.match(/ASP.NET_SessionId=(.*?);/i);
session = match[1];
return
}
}
}
下一个电话是我已经得到的会话数据(Cookie):
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY; //now I just need binary data
var request:URLRequest= new URLRequest("https://somedomain.com/someaddress.aspx"); //yes with https
request.data = '{ "Message":"DoSomeStaff", "Data": { "Some":"info"}}';
request.method = URLRequestMethod.POST;
request.requestHeaders = new Array(new URLRequestHeader("Cookie", "ASP.NET_SessionId=" + session )); //addedd Cookie data here
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request);
而且我在服务器上失去会话并且无法获取数据(需要重新登录)
我在 crossdomain.xml 中也有这一行
allow-http-request-headers-from domain="*" headers="*"
ASP.net 服务器端没有问题原因,来自 PHP 的同类调用工作正常。这里是:
$data_string ='{ "Message":"Login", "Data": { "User":"some@email.com", "Password":"somepassword" }}';
$ch = curl_init('https://somedomain.com/someaddress.aspx');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json charset: UTF-8','Content-Length: ' . mb_strlen($data_string)));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER ,1);
$result = curl_exec($ch);
curl_close($ch);
preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m);
parse_str($m[1], $cookies);
$sessionId = $cookies["ASP_NET_SessionId"];
在下一次通话中,我只是使用该会话变量:
curl_setopt($ch, CURLOPT_COOKIE, "ASP.NET_SessionId=$sessionId; path=/");
一切正常。
我的问题是:我的 Actionscript 代码中缺少什么?或者可能是什么问题?