- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
public CookieContainer GetCookies(string url, string login, string password)
{
try
{
var cookies = new CookieContainer();
string postData = string.Format(@"subaction=dologin&username={0}&password={1}&selected_language=Russian&x=62&y=37", Uri.EscapeDataString(login), Uri.EscapeDataString(password));
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "admin.php");
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.CookieContainer = cookies;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.289 Version/12.01";
httpWebRequest.ServicePoint.Expect100Continue = false;
byte[] ByteQuery = System.Text.Encoding.UTF8.GetBytes(postData);
httpWebRequest.ContentLength = ByteQuery.Length;
Stream QueryStream = httpWebRequest.GetRequestStream();
QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
QueryStream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));
string loginPage = sr.ReadToEnd();
sr.Close();
if (loginPage.IndexOf(@"div class=""error""") == -1)
{
httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
httpWebResponse.Close();
return cookies;
}
else
{
return null;
}
}
catch (Exception)
{
if (n < 3)
{
Thread.Sleep(400);
n++;
return GetCookies(url, login, password);
}
else
{
n = 0;
return null;
}
}
}
Костыльно-ориентированное велосипедирование. Выдержка из паттерна "тулза для работы с вебом", метод авторизации на какой-то из CMS.
bot 27.11.2014 09:59 # 0
Наш человек!
bormand 27.11.2014 10:42 # 0
Сам недавно делал подобную херню на питоне для деплоя джумломодулей.
pushistayapodmyshka 27.11.2014 11:18 # 0
Lokich 27.11.2014 11:49 # 0
pushistayapodmyshka 27.11.2014 11:59 # 0
Lokich 27.11.2014 14:27 # 0
pushistayapodmyshka 27.11.2014 15:16 # 0
Именно.
bormand 27.11.2014 13:51 # 0
Из-за реюзабельности одноразовый скриптик может превратиться в огромную систему... Если это часть большого проекта - говно. Если мелочь для заливки/донастройки - все норм.
> А обработка исключений-то какая... ух!
Ну а что не так то? При любой ошибке пробуем до 3 раз с интервалом 400мс. Меня там больше всего пугает нелокальная переменная n.
pushistayapodmyshka 27.11.2014 15:22 # 0
Да, но по-моему лучше один раз написать себе приличный класс для подобных задач, а не копипастить из проекта в проекта, редактируя урлы, постдату, хттпхэдеры и всякие условия.
Vasiliy 27.11.2014 15:24 # 0
pushistayapodmyshka 27.11.2014 15:31 # 0
К слову, сабж (моего авторства) в своё время был переосмыслен и переписан в полезную библиотеку, которая до сих пор иногда верно служит мне по необходимости.
Анонимус 27.11.2014 12:38 # +1
Потому что если это одноразовый скрипт написал-и-забыл то зачем на C# писать то?
А если это часть системы то там везде хардкод и говно.
bormand 27.11.2014 13:52 # 0
Да, скорее всего, что было под рукой, на том и писали. Ставить ${langname} ради одноразового скриптика влом. А фрейморк 3.5+ сейчас на любой винде есть.
Анонимус 27.11.2014 15:11 # 0
bormand 27.11.2014 16:02 # 0
Ёбаное говно.
> VBS
Говно.
> JScript
Говно, т.к. очень старый стандарт (по стандарту ли вообще?). Но пару раз послужило мне верой и правдой.
> PowerShell
Учить еще одно говно только ради винды? Увольте...
Анонимус 27.11.2014 16:05 # 0
окей. Ну вигет поставьте на винду.
>>Говно.
А писать на сишарпе тупой скрипт не говно?
>>Говно, т.к. очень старый стандарт
Можно подумать тут нуженновый стандарт
>>Учить еще одно говно только ради винды? Увольте...
Если Вы знаете .NET (а Вы знаете .NET раз пишите на C#) то пауершелл выучить -- дело одной недели.
В конце концов под .NET есть и IronPython
bormand 27.11.2014 16:06 # 0
Что-то мне намекает, что во всех этих языках (кроме, разве что, IronPython, но его надо ставить) работа с HTTP ну ничуть не проще, чем в шарпе...
> вигет
curl тогда уж. Он более гибкий. Но дергать его из батников - фублядь, фунахуй.
Анонимус 27.11.2014 16:09 # 0
А в COM есть WinHttpRequest .
А в PS и вовсе есть API к .NET
-------
ы: http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa384071%28v=vs.85%29.aspx
ы2: как это нахуй? А из шела нормально? А когда Вам надо на лялихе куки получить Вы всегда это на C пишете? Или все таки на курле и баше или на перле или на пайтоне?
bormand 27.11.2014 16:14 # 0
Не особо, но bash всё же терпимей, чем батники.
Дело именно в языках. И если у меня есть возможность и скрипт будет чуточку сложнее копирования пары файликов - я стараюсь писать его не на баше, а на каком-нибудь питоне. Почему? Да тупо потому что это язык. Нормальные строки, не выносящие мозг экранировками, нормальные не испохабленные регулярки, нормальная математика, нормальные переменные, нормальные функции, нормальные модули... Так что я вполне понимаю авторов сего творения.
> могут COM
Я знаю. Я с jscript'а шарился в планировщике задач и отправлял e-mail'ы. Терпеть можно, хотя с тем же запуском процессов там не совсем айс. Но я не думаю, что с WinHttpRequest работать проще, чем с HttpWebRequest.
koodeer 27.11.2014 17:59 # +2
Я иногда одноразовые скриптики пишу на C#. Студия всегда под рукой, интеллисенс дописывает большую часть кода, компилится доли секунды, выполняется быстро, статическая типизация избавляет от многих ошибок типа опечаток, и прочие плюшки.
Lokich 29.11.2014 00:37 # 0
После 20-30 версий это отдельный проект, который имеет такое понятие как " пакет". Есть полный фарш для отправки писем, динамические запросы в оракл, выгрузка на ftp, локальное хранилище, файлообменник move it, вложение в почту, таблица в тело письма, упаковка в архивы, в том числе с паролями.... Короче ненависть :(((
betking1 27.11.2014 15:26 # 0
pushistayapodmyshka 27.11.2014 15:37 # 0
betking1 27.11.2014 16:32 # 0
guest 15.12.2014 23:52 # 0
{
if (n < 3)
{
Thread.Sleep(400);
n++;
return GetCookies(url, login, password);
}
else
{
n = 0;
return null;
}
}
После этого, всё написанное раньше, уже не так плохо выглядит!