我正在尝试使用 Web API 从 uTorrent 获取种子列表.获取所需的 token 就OK了:
WebClient client = new WebClient() { Credentials = new NetworkCredential(UserName, pass) };
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/token.html"));
string token = Reader.ReadToEnd();
token = token.Split('>')[2].Split('<')[0];
// token is now something like 3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA
但是当我尝试使用它来获取种子列表时:
Reader = new StreamReader(client.OpenRead("http://localhost:" + port + "/gui/?list=1&token=" + token));
我得到的只是“错误 400 错误请求”。
我试过手动获取 token 。在浏览器页面“http://localhost:30303/gui/?list=1&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA”中正常打开,但在 C# 中没有任何变量的相同链接我仍然收到错误 400。 有趣的是,如果关闭 token 身份验证,WebClient 加载页面可以完美地使用和不使用
"&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA"
但默认情况下启用 token 身份验证,因此我和任何应用程序都应该使用它。 是的,WebRequest/HttpWebRequest 也没有帮助。
附言对不起我的英语,我从来没能让它正常工作
最佳答案
你必须从请求中保存cookie
Classes.CookieAwareWebClient client = new Classes.CookieAwareWebClient() { Credentials = new NetworkCredential("shehab", "shehab") };
StreamReader Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/token.html"));
string token = HtmlRemoval.StripTagsRegexCompiled(Reader.ReadToEnd());
MessageBox.Show(token);
Reader = new StreamReader(client.OpenRead("http://localhost:" + "8080" + "/gui/?list=1&token=" + token));
MessageBox.Show(Reader.ReadToEnd());
对于 cookie 感知类,请转到以下链接(Using CookieContainer with WebClient class),因为 Web 客户端不支持 cookie。
关于c# - 通过 .NET 使用 uTorrent Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068771/