【问题标题】:Api returns 403 error when calling through webrequest, but works when calling in postmanapi通过webrequest调用时返回403错误,但在postman中调用时有效
【发布时间】:2019-09-03 10:22:17
【问题描述】:

我可以从 Postman 成功运行以下 OpenStreetMap api:
https://nominatim.openstreetmap.org/reverse?format=json&lat=30.32736&lon=56.91912

邮递员请求:

GET /reverse?format=json& lat=30.32736& lon=56.91912 HTTP/1.1
Host: nominatim.openstreetmap.org
cache-control: no-cache
Postman-Token: 92646056-107c-4011-b35f-85858ec715bd

但是当尝试使用此代码在 c# 中调用它时:

            HttpWebRequest objRequest = (HttpWebRequest)WebRequest
            .Create("https://nominatim.openstreetmap.org/reverse?format=json&lat=30.32736&lon=56.91912");
            objRequest.Method = "GET";
            objRequest.Headers.Add("User-Agent: Other");

            WebResponse response = (WebResponse)objRequest.GetResponse();
            HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
            string result = "";
            using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
            {
                result = responseStream.ReadToEnd();
                responseStream.Close();
            }

我收到以下错误:

System.Net.WebException: '远程服务器返回错误: (403) 禁止。'

上线:

HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();

我搜索后发现建议在请求中添加以下标头:

objRequest.Headers.Add("User-Agent: SomeName");

但还是不行。

【问题讨论】:

  • 访问捐款资助的服务器时请设置有效的用户代理。
  • @scai 当然,我会的。

标签: c# openstreetmap webrequest


【解决方案1】:

实际上,当我运行您的代码时,我得到一个 ArgumentException “必须使用适当的属性或方法修改 'User-Agent' 标头。”

删除该行也会产生 403 错误。但是,您已经在正确的轨道上:将您的 objRequest.Headers.Add("User-Agent: SomeName"); 行替换为:

objRequest.UserAgent = "SomeName";

然后,它对我来说很好。

【讨论】:

  • 它确实有效,谢谢。我想知道为什么前一行不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 2021-12-26
  • 2013-06-14
  • 2023-04-09
  • 2023-03-23
相关资源
最近更新 更多