4

我正在尝试使用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 也没有帮助。

PS 对不起我的英语,我永远无法让它正常工作

4

3 回答 3

7

您必须从请求中保存 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 感知类,请转到以下链接(将 CookieContainer 与 WebClient 类一起使用),因为 Web 客户端不支持 cookie。

于 2011-08-17T14:26:22.453 回答
1

您应该从请求中保存 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;
于 2011-08-16T04:39:52.540 回答
0

我有一个简单的三步建议:

  1. 当您使用带有令牌的浏览器时,使用Fiddler2分析服务器和浏览器之间的 HTTP 流量。

  2. 打开您的 C# 应用程序并使用 Fiddler2 分析服务器和您的应用程序之间的 HTTP 流量。

  3. 将浏览器的 HTTP 请求和响应与 C# 应用程序的请求和响应进行比较。如果您看到显着差异,则很有可能是问题所在。

于 2011-08-15T18:36:29.120 回答