我正在尝试在我的 .NET Core Web 应用程序项目中调用 API,但它返回这些错误作为响应:
尽管如此,此 API 使用 Postman 和 CURL 可以正确响应。
我研究了 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 服务器不在我的控制之下,我无法检查服务器端日志以获取更详细的错误信息。
有什么我可以检查但我还没有做的吗?
任何线索和想法都可以拯救我。