httpclient post 方法 returns StatusCode:403,ReasonPhrase:'Forbidden'

httpclient post method returns StatusCode: 403, ReasonPhrase: 'Forbidden'

我正在尝试使用 c# httpclient 以编程方式从网站获取数据,但我无法获取数据。 我在下面提供了 link https://ngodarpan.gov.in/index.php/home/statewise_ngo/5972/33/1

将以 table 格式显示数据列表,如果您单击 link 中的任何一个,将会弹出一个包含完整详细信息集的弹出窗口,这是我需要的以编程方式为每条记录获取它。

我每次都尝试通过点击下面的 link 来生成 csrf_token https://ngodarpan.gov.in/index.php/ajaxcontroller/get_csrf

并尝试将 csrf 令牌和 ID 传递给以下 link https://ngodarpan.gov.in/index.php/ajaxcontroller/show_ngo_info

但这会引发错误 403 forbidden。

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:'Forbidden',版本:1.1,内容:System.Net.Http.StreamContent,Headers: { 日期:2019 年 6 月 9 日,星期日 07:01:09 GMT Set-Cookie: csrf_cookie_name=2e39ed6c9bb142836d81233ba1a94732; expires=2019 年 6 月 9 日,星期日 07:01:11 GMT; Max-Age=2;路径=/; httponly 服务器:Apache/2.4.6 服务器:(红帽企业 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 Content-Length: 1131 Content-Type: text/html;字符集=UTF-8 }}

当您获得 csrf_token 时,您应该将其值设置为两个值。 请求正文中的csrf_test_namecookies中的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);
}