c # — Программно войти на сайт в Asp.net

Я хочу извлечь данные из HTML веб-сайта, который должен быть авторизован. Я ищу в Интернете 4 дня без четких результатов.

Мне нужен ответ для Asp.net/C#.

Информация, которую я собрал до сих пор:

  • Мне нужно использовать HttpWebRequest и HttpWebResponse
  • Я должен работать с печеньем
  • Сайт использует PHP, JS / AJAX
  • postData похожа на «email = ???&пароль = ???&login_now = да&login_submit = «;
  • Кнопка входа перенаправляет наHTTP: // WWW.wsName.ком / Ajax / login.ajax.php»

Исходный код страницы входа:

<form method="post" action="/" id="login_form" onsubmit="return ajax_submit('#login_form',post_login)">
<table class="login_table" cellspacing="0" cellpadding="0">
<tr>
<td><label for="email">Email</label></td>
<td><label for="password">Password</label></td>
<td></td>
</tr>
<tr>
<td>
<div class='sign_up_error' id="sign_up_error" style='margin-top:0;margin-left:-207px;'></div>
<div class='light_input' style='width:150px'>
<input type="text" name="email" id="email" class="login_field" style='width:142px' tabindex="1" />
</div>
</td>
<td>
<div class='light_input' style='width:150px'>
<input type="password" name="password" id="password" class="login_field" style='width:142px' tabindex="2" />
</div>
</td>
<td>
<span class='button' id="login_button" onclick="ajax_submit('#login_form',post_login);" tabindex="3"><span class='button_border'>Log In <img src='/pics/cf_mini_arrow_right.png'></span></span>
<input type="submit" class="" style="width:0px; height: 0px; overflow:hidden; border: none;" name="submit_login"/>
</td>
</tr>
<tr>
<td><input type="checkbox" name="remember" id="remember" value="1" tabindex="4"/><label for="remember">Remember me</label></td>
<td class='right' style='padding-right:5px;'><a class='weight_normal' href="/forgot-password/">Forgot password?</a></td>
<input type="hidden" name="login_now" value="yes" />
<td><input type='hidden' name="login_submit" id="login_submit" /></td>
</tr>
</table>
</form>

Заголовок запроса имеет вид (wsName: имя веб-сайта):

  • Accept: Текст / HTML, приложение / XHTML + XML, приложение / XML; д = 0,9, образ / WebP,/; Д = 0,8
  • Accept-Encoding: gzip, deflate
  • Accept-Language: TR-TR, TR, Q = 0,8, EN-US; д = 0,6, собственная, Q = 0,4
  • Cache-Control: макс возраста = 0
  • Подключение: держать-жив
  • Content-Length: 59
  • Content-Type: применение / х-WWW-форм-urlencoded
  • Ведущий: wsName.ком
  • Обновление нестабильным-запросов: 1
  • Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36
    (KHTML, как Gecko) Chrome / 56.0.2924.87 Safari / 537.36

Cookie заголовка запроса

  • wsName[CSS] = medium_text;

  • cc_cookie_accept = cc_cookie_accept;

  • wsName[Чид] = f202a09db0f7411532bdc54bb920cca0;
  • __gads = J = 7d43a0ff7e0df8dd: Т = 1481287600: S = ALNI_MbVjhGdrclkVN4uyx0r1R52luOM5g;
  • __qca = P0-234787652-1483630026242;
  • wsName[Fbtst] = Фис;
  • wsName[Fb_user] = TRUE;
  • PHPSESSID = reiqad6gvibjfhoh608iibdis0;
  • __utmt = 1;
  • __utma = 114888642.270030171.1481287559.1487259806.1487581174.25;
  • __utmb = 114888642.7.10.1487581174;
  • __utmc = 114888642;
  • __utmz = 114888642.1481287559.1.1.utmcsr = (прямой) | utmccn = (прямой) | utmcmd = (нет);
  • wsName[Ajax_info] = 2c56dde8b1c491e92421d6feaa790157% 3Bed2fc2863c7e88bcb0fc986a4a7afe49

Мой код (который не работает и взят из Вот) как:

string loginURL = "http://www.*wsName*.com/ajax/login.ajax.php";
string loginURL2 = "http://www.*wsName*.com";
string formDataStr  = "email=???&password=???&login_now=yes&login_submit=";

//First request: Get the cookies
CookieCollection cookies = new CookieCollection();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginURL);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
//Get the response from the server and save the cookies from the first request..
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cookies = response.Cookies;

//Second request: POST the form data and recover the cookies from the first request..
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(loginURL);
getRequest.CookieContainer = new CookieContainer();
getRequest.CookieContainer.Add(cookies); //recover cookies First request
getRequest.Method = WebRequestMethods.Http.Post;
getRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
getRequest.AllowWriteStreamBuffering = true;
getRequest.ProtocolVersion = HttpVersion.Version11;
//getRequest.Referer = "http://www.*wsName*.com/index.php";
getRequest.AllowAutoRedirect = true;
getRequest.ContentType = "application/x-www-form-urlencoded";

byte[] byteArray = Encoding.ASCII.GetBytes(formDataStr);
getRequest.ContentLength = byteArray.Length;
Stream newStream = getRequest.GetRequestStream(); //open connection
newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
newStream.Close();

HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
string sourceCode = sr.ReadToEnd();
}

Я использовал обе ссылки (loginURL, loginURL2), изменил и перепробовал много вещей, но в конце у меня очень большой ноль. Это первый раз, когда мне нужно было работать с HttpWebRequest и HttpWebResponse. Так что я думаю, что я что-то здесь упускаю.

Пожалуйста, помогите, спасибо заранее.

1

Решение

Вы можете использовать инструмент профиля http-запроса, например, fiddler, чтобы записать детали вашего запроса в веб-браузере, и снова запустить свой код на c #, сравнить два результата, где есть различия.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector