https://gist.github.com/nfriedly/0240e862901474a9447a600e5795d500 पर दिए गए उदाहरण के आधार पर, मैं आईबीएम स्पीच टू टेक्स्ट एपीआई का उपयोग करने के लिए वेबसाकेट का उपयोग करने की कोशिश कर रहा हूं। लेकिन मुझे प्रमाणीकरण भाग में समस्या आ रही है। ऐसा लगता है कि आईबीएम अब उपयोगकर्ता नाम/पासवर्ड प्रदान नहीं करता है। केवल एक एपीआई कुंजी।

तो मुझे टोकन प्राप्त करने के लिए एपीआई का उपयोग करने के लिए उस उदाहरण को जोड़ने का कोई तरीका नहीं मिल रहा है।

प्रमाणीकरण के लिए आईबीएम एपीकी के साथ वेबसाकेट का उपयोग कैसे करें? आईबीएम दस्तावेज़ अप टू डेट नहीं लगता है क्योंकि उनका उदाहरण उपयोगकर्ता नाम और पासवर्ड के साथ कर्ल का उपयोग कर रहा है https://console.bluemix.net/docs/services/speech-to-text/getting-started.html#getting-started-tutorial

मैंने कहीं न कहीं यह भी देखा कि मैं उपयोगकर्ता नाम को "एपीआई" और पासवर्ड को अपने एपीके से बदल सकता हूं। लेकिन यह काम नहीं कर रहा है क्योंकि मुझे सर्वर से एक अनधिकृत त्रुटि मिलती है।

हो सकता है कि मैंने गलत पढ़ा हो और मुझे पासवर्ड के बजाय टोकन पास करना चाहिए। लेकिन फिर मैं अपने APIkey से websockets के साथ टोकन कैसे प्राप्त करूं?

मैं बिना किसी समस्या के HttpClient का उपयोग करके टोकन प्राप्त कर सकता हूं। लेकिन ऐसा लगता है कि मैं उसके बाद वेबसोकेट के साथ उस टोकन का उपयोग नहीं कर सकता, केवल आगे HttpClient कॉल करता है।

-1
Pic Mickael 26 अक्टूबर 2018, 19:17

1 उत्तर

सबसे बढ़िया उत्तर

कुछ मदद से मैंने अंत में पाया कि वेबसाकेट को एपीके के साथ कैसे संभालना है।

अगर किसी और को इसकी आवश्यकता हो तो मैं यहां कोड पोस्ट करता हूं

IamTokenData GetIAMToken(string apikey)
{
  var wr = (HttpWebRequest)WebRequest.Create("https://iam.bluemix.net/identity/token");
  wr.Proxy = null;
  wr.Method = "POST";
  wr.Accept = "application/json";
  wr.ContentType = "application/x-www-form-urlencoded";

  using (TextWriter tw = new StreamWriter(wr.GetRequestStream()))
  {
    tw.Write($"grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={apikey}");
  }
  var resp = wr.GetResponse();
  using (TextReader tr = new StreamReader(resp.GetResponseStream()))
  {
    var s = tr.ReadToEnd();
    return JsonConvert.DeserializeObject<IamTokenData>(s);
  }
}

IamTokenData tokenData = GetIAMToken([Your IamApiKey]);

CancellationTokenSource cts = new CancellationTokenSource();

ClientWebSocket clientWebSocket = new ClientWebSocket();

clientWebSocket.Options.Proxy = null;
clientWebSocket.Options.SetRequestHeader("Authorization", $"Bearer {token.AccessToken}");

// Make the sure the following URL is that one IBM pointed you to
Uri connection = new Uri($"wss://gateway-wdc.watsonplatform.net/speech-to-text/api/v1/recognize");
try
{
  //await clientWebSocket.ConnectAsync(connection, cts.Token);
  clientWebSocket.ConnectAsync(connection, cts.Token).GetAwaiter().GetResult();
  Console.WriteLine("Connected!");
}
catch (Exception e)
{
  Console.WriteLine("Failed to connect: " + e.ToString());
  return null;
}

// ... Do what you need with the websocket after that ...
1
Pic Mickael 2 नवम्बर 2018, 13:33