1

我正在尝试编写一个脚本,将我的所有提要项目标记为在 Google Reader 中已读。它应该像将 4 个变量发布到 API 链接一样简单。但是,我可以成功向 Google 发送 HTTP POST 而不会返回 400 错误的唯一方法是一个简单的 HTML FORM POST,如下所示。我尝试过 PHP cURL,但我从 Google 收到 400 错误,说明我提出了错误的客户端请求。

<form method="post" action="http://www.google.com/reader/api/0/mark-all-as-read">
   <input type="hidden" name="s" value="user/10408189040522127442/state/com.google/reading-list" />
   <input type="hidden" name="t" value="Your reading list" />
   <input type="hidden" name="ts" value="<?php echo time(); ?>" />
   <input type="hidden" name="T" value="<?php session_start(); echo $_SESSION['token']; ?>" />                
   <input type="button" value="Mark All As Read" /></form>

使用 HTML FORM 提交相同的详细信息(就像我尝试使用 cURL 一样)可以正常工作,成功地将所有项目标记为已读,但由于 FORM ACTION 设置为外部站点,因此您在提交时会被重定向到它。为了解决这个问题,我尝试使用以下内容进行 AJAX FORM 提交,因此没有重定向,但这不起作用并且没有提交任何内容。

$(document).ready(function(){
    $("input[type=button]").click(function() {
        $.post($('form').attr("action"), $('form').formSerialize()); 
    });
});

任何人都可以建议吗?1) 为什么 cURL POST 不起作用而简单的 HTML FORM POST 起作用?2) 为什么我不能(默默地)通过 AJAX 提交来提交 HTML FORM?

4

2 回答 2

0

Google 可能要求在发布帖子时设置某些标题,这就是它可能会以 400 错误响应的原因。<form>检查使用 cURL 提交时是否也设置了使用 basic 发送的相同标头。

此外,您不能 $.post() 到 Google 的原因是由于相同的原产地政策

于 2010-12-23T19:01:22.677 回答
0

谷歌确实需要为每个帖子添加一个额外的标题,并且有些会得到。

curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Authorization: GoogleLogin auth=' . $auth));

要获得身份验证,您需要点击https://www.google.com/accounts/ClientLogin

看看这个答案,Google Reader API?

于 2010-12-26T03:25:37.593 回答