【问题标题】:.NET HTTP GET request problem (return state 200 OK instead of 302 Found).NET HTTP GET 请求问题(返回状态 200 OK 而不是 302 Found)
【发布时间】:2021-12-29 10:04:52
【问题描述】:

我正在运行以下代码,但收到的结果与从浏览器(例如 chrome)发出的调用不同。 .net 代码给我 200(OK),而 Chrome 302 带有重定向 url。谁能给我解释一下为什么?

System.Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12
Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf certVerify

Dim client As New System.Net.Http.HttpClient
Dim requestMessage As New System.Net.Http.HttpRequestMessage
requestMessage.RequestUri = New Uri("https://iampe.agenziaentrate.gov.it/sam/UI/Logout?realm=/agenziaentrate")
requestMessage.Method = HttpMethod.Get
requestMessage.Headers.Accept.Add(New MediaTypeWithQualityHeaderValue("*/*"))
requestMessage.Headers.Host = "iampe.agenziaentrate.gov.it"
requestMessage.Headers.Add("Pragma", "no-cache")
requestMessage.Headers.Add("sec-ch-ua", """ Not A;Brand"";v=""99"", ""Chromium"";v=""96"", ""Google Chrome"";v=""96""")
requestMessage.Headers.Add("sec-ch-ua-mobile", "?0")
requestMessage.Headers.Add("sec-ch-ua-platform", """Windows""")
requestMessage.Headers.Add("Upgrade-Insecure-Requests", "1")
requestMessage.Headers.UserAgent.Add(New ProductInfoHeaderValue("ScraperBot", "1.0"))
requestMessage.Headers.Add("Accept", "*/*")
requestMessage.Headers.Add("Sec-Fetch-Site", "none")
requestMessage.Headers.Add("Sec-Fetch-Mode", "navigate")
requestMessage.Headers.Add("Sec-Fetch-User", "?1")
requestMessage.Headers.Add("Sec-Fetch-Dest", "document")
requestMessage.Headers.Add("Accept-Encoding", "gzip, deflate, br")
requestMessage.Headers.Add("Accept-Language", "it-IT,it;q=0.9")
Dim Risposta As System.Net.Http.HttpResponseMessage = client.SendAsync(requestMessage).Result



Public Function certVerify(se As Object, cert As System.Security.Cryptography.X509Certificates.X509Certificate, chain As System.Security.Cryptography.X509Certificates.X509Chain, sslerror As System.Net.Security.SslPolicyErrors)
        Return True
    End Function

enter image description here

【问题讨论】:

    标签: .net httpclient tls1.2


    【解决方案1】:

    HttpClientHandler.AllowAutoRedirect 默认启用。 HttpClient 会自动跟随重定向并从重定向位置返回信息。

    如果 AllowAutoRedirect 设置为 false,则所有 HTTP 状态代码为 300 到 399 的 HTTP 响应都将返回给应用程序。

    我不是 VB 开发人员,因此无法真正向您展示如何在 VB 中执行此操作,但 docs page for HttpClientHandler 上的 C# 代码显示了如何通过在 HttpClientHandler 上传递一个实例来自定义 HttpClient 的行为。您应该能够根据自己的需要进行调整。

    C#

       // Create an HttpClientHandler that doesn't follow redirects
       HttpClientHandler handler = new HttpClientHandler();
       handler.AllowAutoRedirect = false;
    
       // Create an HttpClient object
       HttpClient client = new HttpClient(handler);
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2016-02-10
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2016-08-08
      相关资源
      最近更新 更多