我正在尝试使用它的API添加订阅Google阅读器,但是我收到以下错误:
执行已过期
我在阅读(使用“获取”)订阅或标记列表方面没有任何问题。但是当我尝试添加子(使用'post')
时,它会超时代码是用Ruby on Rails编写的,我使用HTTParty来处理与Web服务的通信。
我的代码如下(我还是Ruby / Rails的新手,所以对于下面的任何不良做法感到抱歉。我很高兴让他们指出我):
class ReaderUser
# Include HTTParty - this handles all the GET and POST requests.
include HTTParty
...
def add_feed(feed_url)
# Prepare the query
url = "http://www.google.com/reader/api/0/subscription/quickadd?client=scroll"
query = { :quickadd => feed_url, :ac => 'subscribe', :T => @token }
query_as_string = "quickadd=#{CGI::escape(feed_url)}&ac=subscribe&T=#{CGI::escape(@token.to_s)}"
headers = { "Content-type" => "application/x-www-form-urlencoded; charset=UTF-8", "Content-Length" => query_as_string.length.to_s, "Authorization" => "GoogleLogin auth=#{@auth}" }
# Execute the query
self.class.post(url, :query => query, :headers => headers)
end
...
end
作为参考,这就是我获取令牌的方式:
# Obtains a token from reader
# This is required to 'post' items
def get_token
# Populate @auth
get_auth
# Prepare the query
url = 'http://www.google.com/reader/api/0/token'
headers = {"Content-type" => "application/x-www-form-urlencoded", "Authorization" => "GoogleLogin auth=#{@auth}" }
# Execute the query
@token = self.class.get(url, :headers => headers)
end
# Obtains the auth value.
# This is required to obtain the token and for other queries.
def get_auth
# Prepare the query
url = 'https://www.google.com/accounts/ClientLogin'
query = { :service => 'reader', :Email => @username, :Passwd => @password }
# Execute the query
data = self.class.get(url, :query => query)
# Find the string positions of AUTH
auth_index = data.index("Auth=") + 5
# Now extract the values of the auth
@auth = data[auth_index,data.length]
end
我很乐意提供所需的任何其他信息。
提前致谢!
答案 0 :(得分:0)
经过大量的捣乱,我找到了解决方案!
我只需要将Content-Length设置为“0”。以前我按照我基于(greader.class.php)的PHP类将它设置为'query'的长度。我提到这个以防其他人有同样的问题。