Преобразование Python в .net C#
У меня есть небольшая функция, написанная на python. Что он делает, так это принимает 2 параметра и использует их для входа на сайт.
предположим, что URL-адрес сайта таков: http://www.abc.com/abcd/login.do
есть 3 параметра: 1) действие = doLoginSubmit
(это фиксированный статический параметр. не измениться)
2) userId = abcd
3) пароль = 1234
(эти 2 поставляются пользователем)
вот код python:
def get_url(url, data=None, timeout=60, opener=None): '''get_url accepts a URL string and return the server response code, response headers, and contents of the file''' '''ref: http://pythonfilter.com/blog/changing-or-spoofing-your-user-agent-python.html''' req_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1' } request = urllib2.Request(url, headers=req_headers) if not opener: jar = cookielib.FileCookieJar("cookies") opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) response = opener.open(request, data) code = response.code headers = response.headers html = response.read() return code, headers, html, opener def site_login(): login_data = urllib.urlencode({'userId' : abcd, 'password' : 1234, 'action' : 'doLoginSubmit'}) code, headers, html, cur_opener = get_url('http://www.abc.com/abcd/login.do', data=login_data, opener=cur_opener) if debug: print html
я пытаюсь сделать эквивалент C#.
вот мой код:
Dictionary<string, string> parameters = new Dictionary<string, string> { { "action", "doLoginSubmit"}, { "userId", uRow["USERNAME"].ToString() }, { "password", uRow["PASSWORD"].ToString() } }; //WebClient client = new WebClient(); //client.Headers.Set("UserAgent", "Mozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1"); //Stream dataStream = client.OpenWrite(string.Format("{0}?", cRow["LINK"].ToString()), "POST"); //string result = client.UploadString(string.Format("{0}?",cRow["LINK"].ToString()), "POST" , UrlEncode(parameters)); WebRequest request = WebRequest.Create(string.Format("{0}?{1}", cRow["LINK"].ToString(), UrlEncode(parameters))); request.Method = "POST"; ((HttpWebRequest)request).UserAgent = "Mozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1"; postDataBytes = Encoding.UTF8.GetBytes(UrlEncode(parameters)); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postDataBytes.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(postDataBytes, 0, postDataBytes.Length); dataStream.Close(); WebResponse response = request.GetResponse(); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = System.Web.HttpUtility.UrlDecode(reader.ReadToEnd()); //webBrowser.Url = new Uri(string.Format("{0}?{1}", cRow["LINK"].ToString(), UrlEncode(parameters)));
линия
string.Format("{0}?{1}", cRow["LINK"].ToString(), UrlEncode(parameters))
дает мне "полный" url-адрес жала:
http://www.abc.com/abcd/login.do?action=doLoginSubmit&userId=abcd&password=1234
теперь скопируйте эту строку URL-адреса в адресную строку Firefox и нажмите enter, и я смогу успешно войти на сайт. Firefox отображает страницу после успешного входа в систему, и я дополнительно подтвердил, что вход в систему действительно успешен.
Итак, я знаю, что по крайней мере эта часть моего кода верна.
Далее я хочу "запустить" этот URL-адрес без браузера, webcontrol или пользовательского интерфейса или каким-то образом успешно отправить учетные данные на сайт и выполнить успешный вход в систему без необходимости нажимать дополнительные кнопки. Я имею в виду, что сам процесс входа в систему не будет иметь никаких визуальных индикаторов. Только после завершения этой функции, в случае успеха, всплывающее окно сообщения с надписью "success" или сообщение "failed".
Как видно из закомментированных строк,
я пробовал webclient-openwrite, uploadstring, uploaddata
также webrequest/webresponse к url-адресу сайта с параметрами, переданными правильно. я также попробовал прямой веб-контроль перейти к строке URL "COMPLETE", но он не входит успешно.
линия
string responseFromServer = System.Web.HttpUtility.UrlDecode(reader.ReadToEnd());
говорит мне, успешен ли вход в систему или нет, и я подтвердил, что он не успешен.
Пожалуйста, помогите мне в получении успешного входа в систему.
я использую C# .Net4.
РЕДАКТИРОВАТЬ:
По какой-то причине я делаю веб-браузер.Перейдите к полному URL-адресу "дважды", кажется, чтобы вызвать успешный вход в систему!
Member 1139403
nn_demo.py