Я хочу, чтобы моя программа на c # автоматически публиковала оценки эпизода при входе в мою учетную запись tvdb.Я делал нечто подобное много раз, используя какой-то код, полученный с . Войдите на сайт и используйте cookie, чтобы получить исходный код для другой страницы в качестве руководства.Вот моя версия:
public class WebClientEx : WebClient
{
public CookieContainer CookieContainer { get; private set; }
public WebClientEx()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
public static string GetWebDataLoginRequired(string url, string loginUrl, NameValueCollection login_data_values)
{
try
{
using (var client = new WebClientEx())
{
// Authenticate
client.UploadValues(loginUrl, login_data_values);
// Download desired page
return client.DownloadString(url);
}
}
catch
{
return null;
}
}
public static readonly NameValueCollection TVDB_LOGIN_DATA = new NameValueCollection
{
{ "username","username" },
{ "password","password" },
{ "setcookie", "on" }
};
public const string TVDB_LOGIN_URL = "http://thetvdb.com/index.php?tab=login&function=Log+In&submit=Log+In";
string url = String.Format("http://www.thetvdb.com/?function=UserRating&type=episode&itemid={0}&rating={1}&seriesid={2}&seasonid={3}", ep.id, rating, ep.seriesid, ep.seasonid);
string data = HtmlLib.GetWebDataLoginRequired(url, HtmlLib.TVDB_LOGIN_URL, HtmlLib.TVDB_LOGIN_DATA);
Прежде всего, я просто хочу сказать, что этот код прекрасно работает для других веб-сайтов, изменив коллекцию namevalue, однако этот код не хочет работать.
Когда я делаю это вручную, подключая прямой результат string.format к веб-браузеру, он работает просто отлично, однако с этим кодом он не работает.Я проверил, используя трассировку пакетов и Fiddler, и я на 100% уверен, что он входит в систему правильно, он просто теряет информацию для входа для второго запроса.