通过 .NET 使用 uTorrent Web API
Posted
技术标签:
【中文标题】通过 .NET 使用 uTorrent Web API【英文标题】:Using uTorrent Web API via .NET 【发布时间】:2011-10-27 11:32:20 【问题描述】:我正在尝试使用 Web API 从 uTorrent 获取种子列表。获取所需令牌正常:
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 错误请求”。
我尝试手动获取令牌。在浏览器页面“http://localhost:30303/gui/?list=1&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA”中打开,但在 C# 中,没有任何变量的相同链接我仍然收到错误 400。 有趣的是,如果关闭令牌身份验证 WebClient 加载页面完美无缺
"&token=3LemfrO_-A-SNBXlnQ2QcQWTYydx7qOqKb1W1S54JJW74Ly3EYGgu0xQSU4AAAAA"
但默认情况下启用令牌身份验证,因此我和任何应用程序都应该使用它。 是的,WebRequest/HttpWebRequest 也没有帮助。
附:对不起我的英语,我永远无法让它正常工作
【问题讨论】:
很可能是编码问题。 【参考方案1】:你必须保存请求中的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。
【讨论】:
【参考方案2】:您应该保存请求中的 cookie
WebRequest request = WebRequest.Create("http://localhost:" + port + "/gui/token.html");
CookieContainer cookies = new CookieContainer();
(request as HttpWebRequest).CookieContainer = cookies;
然后在使用相同令牌时在对 uTorrent 的所有其他请求中使用它:
request = WebRequest.Create("http://localhost:" + port + "/gui/?list=1&token=" + token);
(request as HttpWebRequest).CookieContainer = cookies;
【讨论】:
【参考方案3】:我有一个简单的三步建议:
当您使用带有令牌的浏览器时,使用Fiddler2 分析服务器和浏览器之间的 HTTP 流量。
打开您的 C# 应用并使用 Fiddler2 分析服务器与您的应用之间的 HTTP 流量。
将浏览器的 HTTP 请求和响应与 C# 应用程序的请求和响应进行比较。如果您发现有显着差异,则很有可能是问题所在。
【讨论】:
我试过了。我已经很努力了。看起来 WebClient 和 WebRequest 更改字段 Set-Cookie 和 Opera(我使用)没有。明天我会检查这个方向。非常感谢 我认为 set-cookie 字段是服务器响应的一部分。也许服务器希望您的 WebClient 设置一个 cookie,然后您的 WebClient 应该在所有未来的 HTTP 请求中发回 cookie。这可能吗? 谢谢,就是这样,我找到了问题!以上是关于通过 .NET 使用 uTorrent Web API的主要内容,如果未能解决你的问题,请参考以下文章
全球最受欢迎的BT下载工具排行:2/3网友在用uTorrent迅雷不在前十
WIN7 计划任务 指定的开机时运行程序(例如uTorrent等),无交互式窗口?