Я пытаюсь получить данные из API NHS, используя немного классических c ASP (все, что я знаю, я боюсь), но изо всех сил пытаюсь успешно передать ключ подписки в API.
Инструкции следующие:
- Выберите страницу на веб-сайте NHS, например: https://www.nhs.uk/conditions/acne.
- Запишите путь, например: условия / прыщи.
- Используя такой инструмент, как curl, Postman или ваш веб-браузер, сделайте запрос GET на https://api.nhs.uk/content/acne с действительным ключом подписки subscription- ключ: {ключ подписки} в заголовке запроса.
- Вы получите ответ JSON, структурированный с использованием schema.org, и поля для этого объяснены в следующей документации ....
С https://developer.api.nhs.uk/documentation/content-api
Итак, я написал следующее ...
<%
Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
xml.Open "GET", "https://api.nhs.uk/conditions/abdominal-aortic-aneurysm-screening/", False
on error resume next
xml.setRequestHeader "subscription‑key", "MY-API-KEY-HERE"
xml.setRequestHeader "Content-Type", "application/json"
xml.setRequestHeader "Accept", "application/json"
xml.Send
Response.Write "<h1>The HTML text</h1><xmp>"
Response.Write xml.responseText
Set xml = Nothing
%>
Это просто дает мне следующий ответ: {" statusCode ": 401," message ":" Доступ запрещен из-за отсутствующего ключа подписки. Обязательно включайте ключ подписки, когда маки ng запросы к API. " }
У них есть примеры сценариев на 5 разных языках, но не ASP или даже ASP. NET
Есть идеи, что я могу попробовать, чтобы это работало?
Спасибо
РЕДАКТИРОВАТЬ
Попробуйте метод, предложенный здесь Как я могу публиковать данные с использованием cURL в asp classi c? . ..
<%
Dim http: Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
Dim url: url = "https://api.nhs.uk/conditions/abdominal-aortic-aneurysm-screening/"
'Dim data: data = "something=this" - took this out as its a querystring for POST
With http
Call .Open("GET", url, False)
'Call .SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
Call .SetRequestHeader("subscription‑key", "MY-API-KEY-HERE")
'Call .Send(data) <- the data was the querystring, so not relevant here
Call .Send()
End With
If Left(http.Status, 1) = 2 Then
'Request succeeded with a HTTP 2xx response, do something...
Else
'Output error
Call Response.Write("Server returned: " & http.Status & " " & http.StatusText)
End If
%>
Это дает мне неверный вызов процедуры или аргумент: 'SetRequestHeader'
РЕДАКТИРОВАТЬ С РЕШЕНИЕМ
Исправлен рабочий код с дефисом ...
<%
Dim http: Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
Dim url: url = "https://api.nhs.uk/conditions/abdominal-aortic-aneurysm-screening/"
With http
Call .Open("GET", url, False)
Call .SetRequestHeader("subscription-key", "MYKEYHERE")
Call .Send()
End With
If Left(http.Status, 1) = 2 Then
'Request succeeded with a HTTP 2xx response, do something...
Response.Write http.responseText
Else
'Output error
Call Response.Write("Server returned: " & http.Status & " " & http.StatusText)
End If
%>
Спасибо Lankymart!