2010-12-23 4 views
1

모든 피드 항목을 Google 리더에서 읽음으로 표시하는 스크립트를 작성하려고합니다. API 링크에 4 개의 변수를 게시하는 것만 큼 간단해야합니다. 그러나 400 오류를 다시 얻지 않고 Google에 HTTP POST를 성공적으로 수행 할 수있는 유일한 방법은 다음과 같은 간단한 HTML 양식 POST입니다. PHP cURL을 시도했지만 Google에서 잘못된 클라이언트 요청을 한 것으로 나타나는 400 오류가 발생합니다. (나는 컬 시도 등) HTML 양식을 사용하여 동일한 정보를 제출Google 리더 API - 모두 읽음으로 표시

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

읽을 수 있지만 양식 액션이 외부 사이트로 설정되어 있기 때문에, 당신은 제출시 그것에 리디렉션으로 성공적으로 모든 항목을 표시, 잘 작동 . 이 문제를 해결하기 위해 다음과 같이 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 양식을 제출 (자동 제출) 할 수없는 이유는 무엇입니까?

답변

0

Google은 글을 올릴 때 특정 헤더를 설정해야 할 수 있습니다. 그 이유는 글이 400 오류로 응답했을 수 있습니다. cURL을 사용하여 제출할 때 기본 <form>을 사용하여 보낸 동일한 헤더도 설정되어 있는지 확인하십시오.

또한 Google에 $ .post() 할 수없는 이유는 same origin policy입니다.

관련 문제