2017-02-04 5 views
2

Я пытаюсь подключиться к Oxford Dictionaries API. Я не имея никаких проблем, когда я использую Python с этим кодом:Передача учетных данных HttpWebRequest для API Оксфорда

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(); 

Я проверил идентификатор и ключ правильный, также попробовал все предлагаемое here.

Публикация этого вопроса - мой последний вариант. Спасибо.

+0

почему использование базовой аутентификации в C#, но не питон код? – Crowcoder

+0

Я предполагаю, что базовым является значение по умолчанию в python. –

+0

Я сомневаюсь в этом, но даже если это не угадает ваше имя пользователя и пароль. Сделайте свой запрос в Postman, затем используйте его генератор кода для создания C#. вам нужно будет привести ссылку на RestSharp. – Crowcoder

ответ

3

Это, как правильно добавить свои учетные данные для разработчиков на запрос - они заголовки:

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" 
      } 
     ] 
    } 
+0

Спасибо Crowcoder. Ты спасаешь мой день. –