httpclient post метод возвращает StatusCode: 403, ReasonPhrase: «Запрещено» - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь получить данные с сайта программно, используя c # httpclient, но я не могу получить данные. Я предоставил ссылку ниже https://ngodarpan.gov.in/index.php/home/statewise_ngo/5972/33/1

Там будет список данных, отображаемых в формате таблицы, если вы нажмете на любую из ссылок, появится всплывающее окно с полным набором деталей, которые мне нужны, чтобы получить его программно для каждой записи.

Я пытался генерировать csrf_token каждый раз, нажимая ссылку ниже https://ngodarpan.gov.in/index.php/ajaxcontroller/get_csrf

и попробуйте передать токен csrf и идентификатор по следующей ссылке https://ngodarpan.gov.in/index.php/ajaxcontroller/show_ngo_info

но это выдает ошибку 403. Запрещено.

private void sample1()
{
    string str = 
       "https://ngodarpan.gov.in/index.php/ajaxcontroller/show_ngo_info";
    var client = new HttpClient();

    var pairs = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("id", "169486"),
        new KeyValuePair<string, string>("csrf_cookie_name", 
        "decab99c17a84a9040a03c362317289c")
    };

    var content = new FormUrlEncodedContent(pairs);

    var response = client.PostAsync(str, content).Result;
}

{StatusCode: 403, ReasonPhrase: «Запрещено», Версия: 1.1, Содержимое: System.Net.Http.StreamContent, Заголовки: { Дата: вс, 09 июня 2019 07:01:09 GMT Cookie-набор: csrf_cookie_name = 2e39ed6c9bb142836d81233ba1a94732; истекает = вс, 09-июнь-2019 07:01:11 по Гринвичу; Max-Age = 2; Путь = /; HttpOnly Сервер: Apache / 2.4.6 Сервер: (Red Hat Enterprise Linux) Сервер: OpenSSL / 1.0.1e-fips Сервер: mod_fcgid / 2.3.9 Сервер: PHP / 5.6.30 Сервер: mod_wsgi / 3.4 Сервер: Python / 2.7.5 X-Powered-By: PHP / 5.6.30 Длина контента: 1131 Content-Type: text / html; кодировка = UTF-8 }}

1 Ответ

0 голосов
/ 09 июня 2019

когда вы получаете csrf_token, вы должны установить его значение в две вещи. csrf_test_name в тело запроса и csrf_cookie_name в печенье . Вы можете просмотреть подробную информацию о вкладке сети в браузере.


private async Task sample1()
{
    var url = "https://ngodarpan.gov.in";
    var uri = new Uri(url);
    string str = $"{url}/index.php/ajaxcontroller/show_ngo_info";
    var csrf_token = "80c719c60ac281c34f2f7720fbd28be9";
    HttpClientHandler handler = new HttpClientHandler();
    handler.CookieContainer = new CookieContainer();
    handler.CookieContainer.Add(uri, new Cookie("csrf_cookie_name",csrf_token)); // Adding a Cookie
    var client = new HttpClient(handler);

    client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");

    var pairs = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("id", "169486"),
        new KeyValuePair<string, string>("csrf_test_name", csrf_token)
    };

    var content = new FormUrlEncodedContent(pairs);

    var response = await client.PostAsync(str, content);
    using (FileStream fS = File.Create("result.json"))
    {
        await response.Content.CopyToAsync(fS);
    }
    Console.WriteLine(response);
}
...