来自 .net C# 的 WebService 调用出现错误:(502) 网关错误

Posted

技术标签:

【中文标题】来自 .net C# 的 WebService 调用出现错误:(502) 网关错误【英文标题】:WebService Call from .net C# getting error : (502) Bad Gateway 【发布时间】:2021-06-22 20:44:18 【问题描述】:

尝试从 C# 调用 WebServices 并出现以下错误:

System.Net.WebException: 'The remote server returned an error: (502) Bad Gateway

代码:

WebRequest request = WebRequest.Create("https://xxxxx/cgi/webservice.pl?function=get_latest_ts_values&site_list=130105B&datasource=AT&varfrom=10.00&varto=10.00&lookback=60&format=csv");
        request.Method = "GET";
        WebResponse response = request.GetResponse();
        using (Stream dataStream = response.GetResponseStream() )
        
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);
            Console.ReadLine();
        

但是当我使用 Postman 或只是在浏览器中复制 url 时可以正常工作,并且在以下 python 代码中也可以正常工作:

import requests

dataload = 
dataurl = "https://xxxxx/cgi/webservice.pl?function=get_latest_ts_values&site_list=130105B&datasource=AT&varfrom=10.00&varto=10.00&lookback=60"
headers = 
response = requests.request("GET", dataurl, headers=headers, data=dataload)
for dataresp in response:
    print(dataresp)

我在 C# 代码中做错了什么?

【问题讨论】:

502是5xx错误(服务器错误),暗示这很可能是服务器的问题,而不是客户端的问题。 这可能会有所帮助:***.com/questions/3957915/… 【参考方案1】:

WebRequest 的 uri 具有查询参数 &format=csv。也许这就是您收到 502 的原因。Python 请求缺少该查询参数。您是否通过删除该部分来尝试 WebRequest?

【讨论】:

您尝试过使用 HttpWebRequest 和 HttpWebResponse 吗?也许值得一试?它的工作方式与 WebRequest 和 WebResponse 相同。 我现在很感兴趣。使用 Create(Uri) 代替 Create(String) 怎么样?我非常怀疑这是请求格式的方式。 docs.microsoft.com/en-us/dotnet/api/…【参考方案2】:

可能是内容类型不正确或用户代理的信息错误。邮递员可能会在您不知情的情况下设置这些值。可能会尝试在异常中查看是否有响应流并通过流读取器读取它,以查看是否有更多您没有看到的信息可以为您指明正确的方向。

【讨论】:

【参考方案3】:

最终使用了 RestSharp,它工作正常。 (https://www.nuget.org/packages/RestSharp)

 string Uri = "https://xxxx/cgi/webservice.pl?xxxx";
 var client = new RestSharp.RestClient(Uri);
 client.Timeout = -1;
 var request = new RestRequest(Method.GET);
 IRestResponse response = client.Execute(request);
 Console.WriteLine(response.Content);

【讨论】:

以上是关于来自 .net C# 的 WebService 调用出现错误:(502) 网关错误的主要内容,如果未能解决你的问题,请参考以下文章

rest template调不通webservice

C#使用WebService

从 .NET DLL 使用 webservice - app.config 问题

C# 动态调用 WebService (转)

C# Webservice

android与C# WebService基于ksoap通信(C#篇)