Запрос RESTful API работает в Python и браузере, но не в VB.Net - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу вызвать RESTful API со следующим вызовом

https://sdw-wsrest.ecb.europa.eu/service/data/EXR/D..EUR.SP00.A?updatedAfter=2018-08-01T07%3A05%3A02%2B07%3A05&startPeriod=2018-08-01&detail=dataonly&dimensionAtObservation=TIME_PERIOD

Результатом должен быть XML, содержащий курсы обмена валют.

Мне нужно, чтобы это работало в vb.net, но оно не работает (больше). Несколько дней назад это все еще работало. Я использую следующий код:

Try
    ' define webclient settings
    Dim _webClient As System.Net.WebClient = New System.Net.WebClient

    ' I tried with and without the following line
    ' _webClient.Headers(HttpRequestHeader.UserAgent) = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36"

    Dim link as String = "https://sdw-wsrest.ecb.europa.eu/service/data/EXR/D..EUR.SP00.A?updatedAfter=2018-08-01T07%3A05%3A02%2B07%3A05&startPeriod=2018-08-01&detail=dataonly&dimensionAtObservation=TIME_PERIOD"
    Dim sourceString As String = _webClient.DownloadString(link)

Catch ex As Exception
    ' Error in request url or on the server side
    Console.WriteLine(DateTime.Now.ToString("MMM dd hh:mm:ss") & " Error: " & ex.Message)

Затем ex.message содержит следующую информацию:

Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера

Однако тот же самый запрос работает в моем браузере, когда копируется и вставляется в адресную строку и в Python. Я использую следующий код Python:

import requests

url = 'https://sdw-wsrest.ecb.europa.eu/service/data/EXR/D..EUR.SP00.A?updatedAfter=2018-08-01T07%3A05%3A02%2B07%3A05&startPeriod=2018-08-01&detail=dataonly&dimensionAtObservation=TIME_PERIOD'

response = requests.get(url)
print(response.status_code) #returns 200

В чем заключается ошибка в коде VB.Net? В чем разница?

1 Ответ

0 голосов
/ 04 сентября 2018

Я знаю, в чем была ошибка. Я должен установить заголовок Accept следующим образом:

_webClient.Headers(HttpRequestHeader.Accept) = "*/*"

Тогда это работает.

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