Ich versuche, mit der Google Reader (undokumentierte/inoffizielle) API unter Verwendung von Informationen aus this page zu interagieren. Mein erster Schritt besteht darin, eine SID und ein Token zu bekommen, was gut funktioniert, aber ich kann nichts POSTIEREN, ohne einen 401-Fehler zu bekommen.Warum erhalte ich einen 401 (nicht autorisierten) Fehler beim POST auf Google Reader API?
Hier ist der Code, den ich mit meinem SID und Token zu erhalten:
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;
}
}
Und zu erzeugen, ein Cookie und das Token erhalten:
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;
}
}
Nun, wenn ich versuche, eine zu tun POST (in diesem Beispiel, fügen Sie ein neues Tag) mit dem folgenden, bekomme ich den Fehler 401.
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 = "";
}
Der Fehler tritt auf der Linie Stream Answer = WebResp.GetResponseStream();
wissen Sie zufällig, die URL für das Abonnement mit den neuen Änderungen bitte benötigt? weil ich immer noch den Fehler 401 bekomme und ich vermute, dass es mit der URL zu tun hat – ict1991