我正在尝试将一些CURL代码转换为FLEX / ActionScript。 由于我对于CURL 100%无知,而且对于Flex一般无知且50%无知,而且一般来说,对HTTP有90%的无知...... 我遇到了一些重大困难。
以下CURL代码来自http://code.google.com/p/ga-api-http-samples/source/browse/trunk/src/v2/accountFeed.sh
我完全有理由相信它运作正常。
USER_EMAIL="myaccount@gmail.com" #Insert your Google Account email here
USER_PASS="secretpass" #Insert your password here
googleAuth="$(curl https://www.google.com/accounts/ClientLogin -s \
-d Email=$USER_EMAIL \
-d Passwd=$USER_PASS \
-d accountType=GOOGLE \
-d source=curl-accountFeed-v2 \
-d service=analytics \
| awk /Auth=.*/)"
feedUri="https://www.google.com/analytics/feeds/accounts/default\
?prettyprint=true"
curl $feedUri --silent \
--header "Authorization: GoogleLogin $googleAuth" \
--header "GData-Version: 2"
以下是我将上述CURL转换为AS3
的失败尝试 var request:URLRequest=new URLRequest("https://www.google.com/analytics/feeds/accounts/default");
request.method=URLRequestMethod.POST;
var GoogleAuth:String="$(curl https://www.google.com/accounts/ClientLogin -s " +
"-d Email=myaccount@gmail.com " +
"-d Passwd=secretpass " +
"-d accountType=GOOGLE " +
"-d source=curl-accountFeed-v2" +
"-d service=analytics " +
"| awk /Auth=.*/)";
request.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin " + GoogleAuth));
request.requestHeaders.push(new URLRequestHeader("GData-Version", "2"));
var loader:URLLoader=new URLLoader();
loader.dataFormat=URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, GACompleteHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, GAErrorHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, GAErrorHandler);
loader.load(request);
这可能会让你们大笑起来,这没关系,但如果你能对我发现任何遗憾,请告诉我我所缺少的东西。我很乐意承认功能上的无能,因此让我知道我是多么愚蠢是可选的。
答案 0 :(得分:5)
curl是一个unix命令,你可以在终端中运行它。它返回您请求的URL的原始html页面。
因此,您不能将curl命令复制到Actionscript中,因为Flash / Flex不允许您执行命令行脚本(AIR 2.0会这样做,但这与此无关)。
curl命令的目标是从Google获取身份验证令牌。所以你需要做的就是将你的GoogleAuth
变量设置为第一个使用你提供的参数进行谷歌搜索的HTTP请求的结果,如下所示(伪代码,尚未测试):
var authenticate:URLRequest = new URLRequest("https://www.google.com/accounts/ClientLogin")
var variables:URLVariables = new URLVariables();
variables.Email = "myemail@gmail.com";
variables.Passwd = "mypass";
variables.accountType = "GOOGLE";
variables.source = "MyApplication Name";
variables.service = "analytics";
authenticate.data = variables;
var loader:URLRequest = new URLRequest();
loader.addEventListener(Event.COMPLETE, authenticated);
loader.load(authenticate);
protected function authenticated(event:Event):void
{
var request:URLRequest=new URLRequest("https://www.google.com/analytics/feeds/accounts/default");
request.method = URLRequestMethod.POST;
var GoogleAuth:String = event.data;
request.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin " + GoogleAuth));
request.requestHeaders.push(new URLRequestHeader("GData-Version", "2"));
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, GACompleteHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, GAErrorHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, GAErrorHandler);
loader.load(request);
}
首先,您获得经过身份验证的令牌(然后您可以在所有URLRequest标头中保存并重复使用),然后拨打Google Analytics。
希望有所帮助, 兰斯
答案 1 :(得分:2)
如果您要通过HTTP进行大量开发,您还应该考虑使用Charles Proxy或Firebug之类的东西来调试和查看您的实际HTTP请求。