C# Авторизоваться на сайте через аякс

368
20 февраля 2017, 12:11

Я пытаюсь авторизоваться на сайте через post запрос

string reqString = "http://ДОМЕН/panel/login&login=" + login.Text + "&pass=" + pass.Text;
var client = WebRequest.Create(reqString);
client.Headers.Set("Authorization", "Basic YWRtaW46MTIzNDU=");
client.Headers["Authorization"] = "YWRtaW46MTIzNDU=";
client.Headers.Add(String.Format("X-Requested-With:{0}", "XMLHttpRequest"));
client.Method = "POST";
client.ContentType = "application/x-www-form-urlencodedn";
HttpWebResponse resp;
using (resp = (HttpWebResponse)client.GetResponse())
{
    if (resp.GetResponseStream() != null)
    {
        var status = resp.StatusDescription;
        var reader = new StreamReader(resp.GetResponseStream());
        var obj = reader.ReadToEnd();
    }
}

Авторизация проходит через аякс, пост запросом, как сохранить полученные куки? И составить условие типа: ЕСЛИ авторизация = ПРАВДА - то вывести то то... ?

Answer 1
private async Task<string> Authorize(string userName, string passwd)
    {
        var uri = new Uri("http://ДОМЕН/panel/login");
        // Тело запроса
        var formContent = new FormUrlEncodedContent(new[] 
        {
            new KeyValuePair<string, string>("login", userName),
            new KeyValuePair<string, string>("pass", password)
        });
        var client = new HttpClient();
        // Добавляешь нужные тебе заголовки, для примера взял Accept-type
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var response = await client.PostAsync(uri.ToString(), formContent);
        var responseContent = await response.Content.ReadAsStringAsync();
        dynamic jsonResult = JObject.Parse(responseContent);
        // Тут уже зависит от структуры ответа на запрос. 
        // Для примера достаешь status из запроса.
        return jsonResult.status;
    }
public async Task<ActionResult> LoginInExternal()
{
    var response= await Authorize("login@login.ru", "password");
    response == 1 ? Console.WriteLine("Авторизован") : Console.WriteLine("Не Авторизован");
}

Если запрос не идёт, можешь потестить с помощью какой-либо утилиты по типу Postman. На Windows устанавливается через расширения Chrome, для Mac, насколько я помню, из AppStore.

READ ALSO
Изменяется порт клиента tcp

Изменяется порт клиента tcp

Пишу чат на C# по протоколу TCPСтолкнулся с проблемой что при каждом соеденении клиента с сервером, у клиента меняется порт

272
.Net Core, AppDomain, RPC свой велосипед

.Net Core, AppDomain, RPC свой велосипед

Сейчас вNet Core нет AppDomain и RPC

334
WebBrowser не удается загрузить страницу с javascript

WebBrowser не удается загрузить страницу с javascript

Необходимо парсить страницу с использованием HtmlAgilityPack, но некоторые нужные поля загружаются из JSКак загрузить страницу полностью после...

447
Android C#: автоматическая посылка SMS из сервиса

Android C#: автоматическая посылка SMS из сервиса

У меня в приложении, написанном на C# в Xamarin Studio имеется сервис, из которого нужно автоматически в нужный моент слать SMS на заданный номер с заданным...

305