我正在尝试连接到Oxford Dictionaries API 。当我在这段代码中使用python时,我没有遇到任何问题:
import requests
import json
app_id = 'my id'
app_key = 'my key'
language = 'en'
word_id = 'Ace'
url = 'https://od-api.oxforddictionaries.com:443/api/v1/entries/' + language + '/' + word_id.lower()
r = requests.get(url, headers = {'app_id': app_id, 'app_key': app_key})
print("code {}\n".format(r.status_code))
但是在c#中我收到错误403使用以下代码验证失败:
HttpWebRequest req = null;
string PrimeUrl = "https://od-api.oxforddictionaries.com:443/api/v1/entries/en/"
string uri = PrimeUrl+word ;
req = (HttpWebRequest)HttpWebRequest.Create(uri);
string credentials = String.Format("{0}:{1}", uid, pwd);
byte[] bytes = Encoding.ASCII.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
req.Headers.Add("Authorization", authorization);
req.Method = WebRequestMethods.Http.Get;
req.Accept = "application/json";
HttpWebResponse HWR_Response = (HttpWebResponse)req.GetResponse();
我仔细检查了ID和密钥是否正确,还尝试了所有建议here。
发布此问题是我的最后一招。谢谢。
答案 0 :(得分:4)
这是如何正确地将您的开发人员凭据添加到请求中 - 它们是标题:
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
namespace OxfDictionary
{
class Program
{
static void Main(string[] args)
{
HttpWebRequest req = null;
string PrimeUrl = "https://od-api.oxforddictionaries.com:443/api/v1/entries/en/";
string uri = PrimeUrl + "robot";
req = (HttpWebRequest)HttpWebRequest.Create(uri);
//These are not network credentials, just custom headers
req.Headers.Add("app_id", "5a......3");
req.Headers.Add("app_key", "d12............1a0");
req.Method = WebRequestMethods.Http.Get;
req.Accept = "application/json";
using (HttpWebResponse HWR_Response = (HttpWebResponse)req.GetResponse())
using (Stream respStream = HWR_Response.GetResponseStream())
using (StreamReader sr = new StreamReader(respStream, Encoding.UTF8))
{
string theJson = sr.ReadToEnd();
Debug.WriteLine(theJson);
Console.WriteLine(theJson);
}
Console.ReadKey();
}
}
}
结果是:
{
"metadata": {
"provider": "Oxford University Press"
},
"results": [
{
"id": "robot",
"language": "en",
"lexicalEntries": [
{
"entries": [
{
"etymologies": [
"from Czech, from robota forced labour. The term was coined in K. Čapek's play R.U.R. Rossum's Universal Robots (1920)"
],
"grammaticalFeatures": [
{
"text": "Singular",
"type": "Number"
}
],
"senses": [
{
"definitions": [
"a machine capable of carrying out a complex series of actions automatically, especially one programmable by a computer:"
],
"domains": [
"Electronics"
],
"examples": [
{
"text": "a robot arm"
},
{
"text": "half of all American robots are making cars or trucks"
}
],
"id": "m_en_gb0714510.001",
"subsenses": [
{
"definitions": [
"(especially in science fiction) a machine resembling a human being and able to replicate certain human movements and functions automatically:"
],
"examples": [
{
"text": "the robot closed the door behind us"
}
],
"id": "m_en_gb0714510.002"
},
{
"definitions": [
"a person who behaves in a mechanical or unemotional manner:"
],
"examples": [
{
"text": "public servants are not expected to be mindless robots"
}
],
"id": "m_en_gb0714510.003"
}
]
},
{
"crossReferenceMarkers": [
"another term for crawler (in the computing sense)"
],
"crossReferences": [
{
"id": "crawler",
"text": "crawler",
"type": "see also"
}
],
"domains": [
"Computing"
],
"id": "m_en_gb0714510.004"
},
{
"definitions": [
"a set of automatic traffic lights:"
],
"domains": [
"Motoring"
],
"examples": [
{
"text": "waiting at a robot I caught the eye of a young woman"
}
],
"id": "m_en_gb0714510.005",
"regions": [
"South African"
]
}
]
}
],
"language": "en",
"lexicalCategory": "Noun",
"pronunciations": [
{
"audioFile": "http://audio.oxforddictionaries.com/en/mp3/robot_gb_1.mp3",
"dialects": [
"British English"
],
"phoneticNotation": "IPA",
"phoneticSpelling": "ˈrəʊbɒt"
}
],
"text": "robot"
}
],
"type": "headword",
"word": "robot"
}
]
}