当前位置: 首页 > 知识库问答 >
问题:

httpclient post方法返回状态代码:403,原因短语:“禁止”

蒋曾笑
2023-03-14

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

将有一个以表格格式显示的数据列表,如果单击任何链接,将出现一个弹出窗口,其中包含完整的详细信息,我需要通过编程为每个记录获取这些详细信息。

我已尝试通过点击以下链接每次生成csrf\U令牌https://ngodarpan.gov.in/index.php/ajaxcontroller/get_csrf

试着通过csrf令牌

但这会抛出一个错误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,原因短语:“禁止”,版本: 1.1,内容:系统。网。https。流内容,标题:{日期: 09年6月2019 07:01:09日星期日格林尼治标准时间设置Cookie:csrf_cookie_name=2e39ed6c9bb142836d81233ba1a94732;过期=09年6月-2019 07:01:11日星期日格林尼治标准时间;最大年龄=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-Powerd-By: PHP/5.6.30内容长度: 1131内容类型: text/html;charset=UTF-8}}

共有1个答案

邢杰
2023-03-14

当您获得csrf\U令牌时,应将其值设置为两个值<请求正文中的代码>csrf\u test\u name,cookie中的代码>csrf\u cookie\u 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);
}
 类似资料:
  • 我有一个springboot/openapi应用程序。不依赖Spring Security性。通过swagger启动POST请求时,返回的状态为403。请求未到达控制器类。然而,Get请求确实有效,并返回状态200。 配置如下 application.yaml 403状态的原因可能是什么? 控制器

  • 我正在尝试使用BitBucket GIT存储库设置Jenkins,但Jenkins控制台总是给我以下错误代码: 我尝试过很多不同的方法,但总是失败。我的服务器上允许9418端口上的通信量。服务器处于1 Gbps连接上。

  • 问题内容: 我正在尝试制作Sitecraper。我是在本地计算机上制作的,在那儿工作得很好。当我在服务器上执行相同操作时,它显示403禁止错误。我正在使用PHP简单HTML DOM解析器 。我在服务器上收到的错误是这样的: 警告:file_get_contents(http://example.com/viewProperty.html?id=7715888)[function.file- get

  • 我已经使用Spring Security和Spring Web的依赖项设置了一个Spring boot应用程序。我在MemoryAuthentication()中使用了这个例子。我设置了3个html页面,并将它们放在静态文件夹中(我不使用Thymeleaf或JSP页面,只使用普通html)。 当我使用default formLogin()并运行应用程序时,我会得到spring security的默

  • 我得到一个AWS错误代码:SignatureDoesNotMatch,状态代码:403时,试图通过亚马逊SES发送邮件。 我已经确认我正在使用通过https://console.aws.amazon.com/iam/home?#users创建的正确凭据,错误仍然存在。 我假设我在iam/home上创建的凭据实际上是全局的,但我不知道我进一步做错了什么。整个错误是: AWS错误代码:Signatur