2010-12-23 5 views
1

J'essaie d'écrire un script qui marque tous mes éléments de flux comme lus dans Google Reader. Cela devrait être aussi simple que de publier 4 variables sur un lien API. Cependant, la seule façon de réussir un POST HTTP sur Google sans récupérer une erreur 400 est un HTML POST POST simple comme suit. J'ai essayé PHP cURL mais je reçois une erreur 400 de Google indiquant que j'ai fait une mauvaise demande de client.API Google Reader - Marquer tout comme lu

<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> 

Soumettre les mêmes détails en utilisant un formulaire HTML (comme je l'ai essayé avec cURL) fonctionne très bien, marquer avec succès tous les éléments comme lus mais parce que le FORM ACTION est réglé sur un site externe, vous êtes redirigé vers ce sur présentation . Pour contourner cela, j'ai essayé de faire une soumission AJAX FORM avec ce qui suit, donc il n'y a pas de redirection mais cela ne fonctionne pas et rien n'est soumis.

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

Quelqu'un peut-il vous conseiller? 1) Pourquoi un POST cURL ne fonctionne-t-il pas mais un simple HTML FORM POST le fait? 2) Pourquoi ne puis-je pas (silencieusement) soumettre le formulaire HTML avec une soumission AJAX?

Répondre

0

Google peut exiger que certains en-têtes soient définis lors de la publication de la publication, ce qui explique pourquoi il est possible qu'il réponde à une erreur 400. Vérifiez que les mêmes en-têtes qui sont envoyés en utilisant le <form> de base sont également définis lors de la soumission en utilisant cURL.

En outre, la raison pour laquelle vous ne pouvez pas $ .post() à Google est due à la same origin policy.

Questions connexes