1

Google リーダー内ですべてのフィード アイテムを既読としてマークするスクリプトを作成しようとしています。4 つの変数を API リンクに投稿するだけの簡単なものである必要があります。ただし、400 エラーを返さずに HTTP POST を Google に正常に作成できる唯一の方法は、次のような単純な 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 フォームを (黙って) 送信できないのはなぜですか?

4

2 に答える 2

0

Google では、すべての投稿と一部の取得に追加のヘッダーが必要です。

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 に答える
0

Google では、投稿を行うときに特定のヘッダーを設定する必要がある場合があります。そのため、400 エラーで応答する場合があります。<form>cURL を使用して送信する場合も、basic を使用して送信されるのと同じヘッダーが設定されていることを確認してください。

また、Google に $.post() できない理由は、同じオリジン ポリシーによるものです。

于 2010-12-23T19:01:22.677 に答える