在Javascript中通过XMLHttpRequest使用Google的ClientLogin接口

时间:2009-05-29 23:32:25

标签: http-headers xmlhttprequest

我正在尝试学习Google代码网站上的帐户身份验证API详细说明的ClientLogin界面。

我在Javascript中使用Firefox 3.5pre(Shiretoko)和XMLHttpRequest对象来跟踪该过程。这是我所拥有的精简版本:

<html>
<head>
<title>Test</title>
<script type="text/javascript">
  //<![CDATA[
function update() {
  var auth_params = "accountType=HOSTED_OR_GOOGLE&Email=val"
                    +"&passwd=val&service=cl&source=MMA-Learning";
  var request = new XMLHttpRequest();

  request.open('POST', 'https://www.google.com/accounts/ClientLogin', true);

  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-Length", auth_params.length);
  request.setRequestHeader("Connection", "close");

  request.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      alert ("Request done");
    }
  };

  try {
    request.send( auth_params );
  } catch (e) {
    alert ("Send Exception:\n"+e);
  }
}
  //]]>
</script>
</head>
<body>
  <a href="javascript:update()">Authenticate</a>
</body>
</html>

当我点击身份验证链接时,我得到的所有内容都是Bad Request响应。检查请求标头,我看不到Content-Type设置为application/x-www-form-urlencoded

我正在使用Firebug 1.5X来检查流量。

目前,我想要做的就是生成 Sample Request 部分中提到的请求,并获得 Sample Responses 部分中提到的响应。如果我到达那里,我想获得一些特定于帐户的数据,例如未读的Google阅读器供稿等。

2 个答案:

答案 0 :(得分:1)

我怀疑你被Javascript的“同源”政策所困扰。它可以防止Javascript(包括XmlHttpRequest)从另一个域访问一个域。更多信息可从Mozilla获得。

有一些方法可以解决这个问题,但我不知道他们是否会使用Google的API。

答案 1 :(得分:-1)

'passwd'中的'p'是一个小的'p'而不是一个大写'P'

你可能已经想到了这一点。当你发帖并找到答案时,如果你发布答案也总是很有礼貌。这有助于未来的人们查看您的帖子以获取信息

那个'p'花了我两个小时的时间才找到,因为我坚持认为google给出的代码被严格复制并且没有出现任何错误

互联网上没有任何问题没有答案