Перевод CURL в FLEX HTTPRequests - PullRequest
2 голосов
/ 01 мая 2010

Я пытаюсь преобразовать некоторый код CURL в FLEX / ActionScript. Так как я на 100% не знаю о CURL и на 50% не знаю о Flex и на 90% вообще не знаю о HTTP ... У меня значительные трудности.

Следующий код 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);

Вероятно, это рассмешит вас всех, и это нормально, но если вы можете найти какую-то жалость ко мне, пожалуйста, дайте мне знать, что мне не хватает. Я с готовностью допускаю функциональную неумелость, поэтому сообщать мне, насколько я глуп, необязательно.

Ответы [ 2 ]

5 голосов
/ 01 мая 2010

Эй, интересный вопрос.

curl - это команда unix, которую вы запускаете в терминале. Он возвращает необработанную HTML-страницу запрошенного вами URL.

Таким образом, вы не можете просто скопировать команду curl в Actionscript, поскольку Flash / Flex не позволяет выполнять сценарии командной строки (AIR 2.0 делает, но здесь это не актуально).

Цель команды curl - получить токен аутентификации от Google. Таким образом, все, что вам нужно сделать, это установить в вашей переменной GoogleAuth результат первого HTTP-запроса к Google с параметрами, которые вы предоставляете, что-то вроде этого (псевдокод, не проверял):

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.

Надеюсь, это поможет, Lance

2 голосов
/ 02 мая 2010

Если вы собираетесь много работать над HTTP, вам также следует использовать что-то вроде Charles Proxy или Firebug для отладки и просмотра ваших реальных HTTP-запросов. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...