Api возвращает ошибку 403 при звонке через webrequest, но работает при звонке в почтальоне - PullRequest
0 голосов
/ 12 апреля 2019

Я могу успешно запустить следующие 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");

Но все еще не работает.

1 Ответ

2 голосов
/ 12 апреля 2019

На самом деле, когда я запускаю ваш код, я получаю ArgumentException «Заголовок« Пользователь-агент »должен быть изменен с использованием соответствующего свойства или метода».

Удаление строки также приводит к ошибке 403. Но вы уже на правильном пути: замените строку objRequest.Headers.Add("User-Agent: SomeName"); на:

objRequest.UserAgent = "SomeName";

Тогда у меня все нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...