2010-12-23 17 views
1

Ich versuche ein Skript zu schreiben, das alle meine Feedelemente als gelesen in Google Reader markiert. Es sollte so einfach sein, wie 4 Variablen an eine API-Verbindung zu senden. Der einzige Weg, wie ich erfolgreich einen HTTP-POST an Google erstellen kann, ohne einen 400-Fehler zurückzuerhalten, ist ein einfacher HTML-FORM-POST wie folgt. Ich habe PHP cURL versucht, aber ich bekomme einen 400 Fehler von Google, der besagt, dass ich eine schlechte Kundenanfrage gemacht habe.Google Reader API - Alle als gelesen markieren

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

Einreichen der gleichen Details eines HTML-Formular verwenden (wie ich mit cURL versucht) funktioniert gut, erfolgreich alle Elemente Markierung als lesen, sondern weil die FORM ACTION auf eine externe Seite gesetzt ist, werden Sie es nach Vorlage umgeleitet . Um dies zu umgehen, habe ich versucht, eine AJAX-FORM-Vorlage mit den folgenden zu tun, also gibt es keine Umleitung, aber das funktioniert nicht und nichts wird gesendet.

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

Kann jemand beraten? 1) Warum funktioniert ein cURL POST nicht, aber ein einfacher HTML FORM POST? 2) Warum kann ich das HTML-Formular nicht (stillschweigend) mit einer AJAX-Einreichung einreichen?

Antwort

0

Google benötigt möglicherweise bestimmte Header, die während des Posts festgelegt werden. Daher reagiert es möglicherweise mit einem 400-Fehler. Stellen Sie sicher, dass die gleichen Header, die mit der Basis <form> gesendet werden, ebenfalls festgelegt werden, wenn Sie sie mit cURL senden.

Auch der Grund, warum Sie nicht $ .post() zu Google ist aufgrund der same origin policy.

Verwandte Themen