为什么在发布到 Google Reader API 时会收到 401(未经授权)错误? [英] Why am I getting a 401 (Unauthorized) error when POSTing to Google Reader API?

查看:26
本文介绍了为什么在发布到 Google Reader API 时会收到 401(未经授权)错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用来自 本页.我的第一步是获取一个 SID 和令牌,它工作正常,但我似乎无法在没有收到 401 错误的情况下发布任何内容.

I'm trying to interface with the Google Reader (undocumented/unofficial) API using information from this page. My first step is to get a SID and token, which works fine, but I can't seem to POST anything without getting a 401 error.

这是我用来获取我的 SID 和令牌的代码:

Here is the code I'm using to get my SID and token:

static string getSid()
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/ClientLogin?service=reader&Email=username&Passwd=password");
        req.Method = "GET";
        string sid;

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        using (var stream = response.GetResponseStream())
        {
            StreamReader r = new StreamReader(stream);
            string resp = r.ReadToEnd();

            int indexSid = resp.IndexOf("SID=") + 4;
            int indexLsid = resp.IndexOf("LSID=");
            sid = resp.Substring(indexSid, indexLsid - 5);

            return sid;
        }
    }

并生成 cookie 并获取令牌:

And to generate a cookie and get the token:

    static Cookie getCookie(string sid)
    {
        Cookie cookie = new Cookie("SID", sid, "/", ".google.com");
        return cookie;
    }

    static string getToken(string sid, Cookie cookie)
    {
        string token;
        string url = "http://www.google.com/reader/api/0/token";

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.CookieContainer = new CookieContainer();
        req.CookieContainer.Add(cookie);

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        using (var stream = response.GetResponseStream())
        {
            StreamReader r = new StreamReader(stream);
            token = r.ReadToEnd();
            return token;
        }
    }

现在,如果我尝试使用以下内容进行 POST(在本例中,插入新标签),则会收到 401 错误.

Now if I try to do a POST (in this example, insert a new tag) using the following, I get the 401 error.

    static void insertTag(string tag, Cookie cookie)
    {
        string result = "";
        string data = Uri.EscapeDataString("a="+tag+"&T=" + Program.token);

        byte[] buffer = Encoding.GetEncoding(1252).GetBytes(data);
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create
            ("http://www.google.com/reader/api/0/edit-tag?client=-");
        WebReq.Method = "POST";

        WebReq.Credentials = new NetworkCredential("username", "password");


        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;

        Stream PostData = WebReq.GetRequestStream();

        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        result = _Answer.ReadToEnd();

        if (result.Length < 0)
            result = "";
    }

错误发生在行 Stream Answer = WebResp.GetResponseStream();

推荐答案

由于一些过时的文档,我使用了错误的 URL 来访问 Google Reader API!在 Google 阅读器中添加标签的正确 URL(截至 2009 年 8 月)是http://www.google.com/reader/api/0/subscription/edit?client=scroll带有 POST 参数a=user/-/label/[您的标签]&s=feed/[feed url]&ac=edit&T=[token]

Turns out I was using the wrong URL to access the Google Reader APIs thanks to some outdated documentation! The correct URL for adding labels in Google Reader (as of August 2009) is http://www.google.com/reader/api/0/subscription/edit?client=scroll with POST arguments a=user/-/label/[your label]&s=feed/[feed url]&ac=edit&T=[token]

这篇关于为什么在发布到 Google Reader API 时会收到 401(未经授权)错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆