【问题标题】:Using uTorrent Web API via .NET通过 .NET 使用 uTorrent Web API
【发布时间】: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 也没有帮助。

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

【问题讨论】:

  • 很可能是编码问题。

标签: c# .net token asp.net-web-api utorrent


【解决方案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】:

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

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

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

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

      【讨论】:

      • 我试过了。我已经很努力了。看起来 WebClient 和 WebRequest 更改字段 Set-Cookie 和 Opera(我使用)没有。明天我会检查这个方向。非常感谢
      • 我认为 set-cookie 字段是服务器响应的一部分。也许服务器希望您的 WebClient 设置一个 cookie,然后您的 WebClient 应该在所有未来的 HTTP 请求中发回 cookie。这可能吗?
      • 谢谢,就是这样,我找到了问题!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多