我正在尝试编写一个脚本,标记我在谷歌阅读器中读取的所有Feed项目。它应该像将4个变量发布到API链接一样简单。但是,我可以成功地向Google发送HTTP POST而不会收到400错误的唯一方法是使用以下简单的HTML FORM POST。我已经尝试过PHP cURL,但是我收到来自谷歌的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表单提交相同的详细信息(我尝试使用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?
答案 0 :(得分:0)
Google可能会在发布帖子时要求设置某些标头,这就是为什么它可能会响应400错误。使用cURL提交时,请检查使用基本<form>
发送的标头是否也已设置。
另外,你不能将$ .post()加入Google的原因是same origin policy。
答案 1 :(得分:0)
Google确实需要为每个帖子添加额外的标题,而有些标题会获得。
curl_setopt($ ch,CURLOPT_HTTPHEADER,array('授权:GoogleLogin auth ='。$ auth));
要获得验证,您需要点击https://www.google.com/accounts/ClientLogin
看一下这个答案,Google Reader API?