将HttpWebRequest凭据传递给Oxford API

时间:2017-02-04 11:55:07

标签: c# httpwebrequest

我正在尝试连接到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

发布此问题是我的最后一招。谢谢。

1 个答案:

答案 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"
            }
        ]
    }