Unity WWWForm не авторизован для лазури - PullRequest
0 голосов
/ 09 января 2019

Я должен отправить запрос с изображением в Microsoft Azure Custom Vision с заголовком «Prediciton-Key» -> myKey, а тело должно быть изображением (двоичные данные).

Прежде всего, я попробовал с почтальоном, и он отлично работает, но когда я помещаю его в Unity, я получаю ошибку: 401 Unauthorized.

Кто-нибудь знает почему? (я ставлю ключ API в виде строки)

    WWWForm form = new WWWForm();
    form.headers.Add("Prediction-Key", "xxxxxxxxxxxxxxxxxxxxxxxx");
    form.AddBinaryData("fileUpload", texture.EncodeToPNG());

   UnityWebRequest req = UnityWebRequest.Post(link,form);

    yield return req.SendWebRequest();

1 Ответ

0 голосов
/ 09 января 2019

В document они фактически не показали ни одного примера использования Prediction-Key, но я думаю, что он работает аналогично примерам с Training-Key например ::10000 *

curl -X POST "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Training/projects/{projectId}/tags?name=cat" -H "Training-Key: $TRAININGKEY" --data-ascii ""

Заголовок после -H - это заголовок, добавленный к самому http-запросу, а не как поле заголовка в form.

Я почти уверен, что вы должны использовать строку в кодировке base64, аналогичную той, которая используется при добавлении заголовков авторизации ( Source )

string Base64String(string key)
{
    return System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(key));
}

и чем его использовать req.SetRequestHeader для того, чтобы авторизовать сам http-запрос не как заголовок в форме:

WWWForm form = new WWWForm();
form.AddBinaryData("fileUpload", texture.EncodeToPNG());

UnityWebRequest req = UnityWebRequest.Post(link,form);
req.SetRequestHeader("Prediction-Key", Base64String("xxxxxxxxxxxxxxxxxxxxxxxx");

yield return req.SendWebRequest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...