HTTP 请求在 Postman 和curl 中有效,但在 .NET Core 代码中无效,并会抛出 504(网关超时)和 502(代理错误)错误

问题描述 投票:0回答:0

我正在尝试在我的 .NET Core Web 应用程序项目中调用 API,但它返回这些错误作为响应:

  1. 504 网关超时
  2. 502 网关错误

尽管如此,此 API 使用 PostmanCURL 可以正确响应。

我研究了 Fiddler 中 Postman 和 CURL 的所有标头,并在代码中异步它们,尝试了不同的 HTTP 客户端库,如“RestSharp”和“HttpClient”,甚至在原始 .NET Core 控制台应用程序中测试了简化的代码,运行了代码在两台不同的本地机器上。

public static async Task GetQuote()
{
    try
    {
        var content = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><job><job_action>QUOTE</job_action></job>";

        using (var handler = new HttpClientHandler())
        {
            handler.Proxy = null; // Explicitly set proxy to null
            handler.UseProxy = false; // Ensure proxy is disabled
            handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; // Ensure correct SSL/TLS protocol

            using (var client = new HttpClient(handler))
            {
                client.Timeout = TimeSpan.FromMinutes(5); // Increase timeout duration
                // Additional Headers to match POSTMAN request
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("br"));
                client.DefaultRequestHeaders.Connection.Add("keep-alive");
                client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue
                {
                    NoCache = true
                };

                var form = new MultipartFormDataContent();
                var byteArray = Encoding.GetEncoding("ISO-8859-1").GetBytes(content);
                var byteContent = new ByteArrayContent(byteArray);
                byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");

                form.Add(byteContent, "jobxml", "job_quote.xml");

                var response = await client.PostAsync("https://www.apiServer.com/online/getxmljob.cl", form);
                Console.WriteLine("Response Status Code: " + response.StatusCode);
                response.EnsureSuccessStatusCode();

                var responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Response Body: " + responseBody);
            }
        }
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"HttpRequestException: {ex.Message}");
        Console.WriteLine($"Status Code: {ex.StatusCode}");
    }
    catch (TaskCanceledException ex)
    {
        Console.WriteLine("TaskCanceledException: Request timed out.");
        Console.WriteLine($"Exception: {ex.Message}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exception: {ex.Message}");
    }
}

我已尽我所能,但仍然遇到“504 网关超时”错误。

不幸的是,API 服务器不在我的控制之下,我无法检查服务器端日志以获取更详细的错误信息。

有什么我可以检查但我还没有做的吗?

任何线索和想法都可以拯救我。

.net-core httprequest http-status-code-504 http-status-code-502
© www.soinside.com 2019 - 2024. All rights reserved.