Как я могу опубликовать что-то вроде этого? - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблема с API в консоли.Поэтому я хочу опубликовать сообщение и всегда получаю 411 ошибку или 403. Это мой код:

            string IntId = "suli";
            var lekeres = WebRequest.Create("https://xxxx.e-kreta.hu/idp/api/v1/Token") as HttpWebRequest;
            lekeres.Method = "POST";
            string adatokkal = "institute_code=" + IntId + "&userName=" + azonosito + "&password=" + jelszo + "&grant_type=password&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56";
            lekeres.Headers.Add(HttpRequestHeader.Authorization,adatokkal);
            var response = lekeres.GetResponse() as HttpWebResponse;
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                Console.WriteLine(responseFromServer);
            }

Исходная команда Curl (работает):

curl --data "institute_code=xxxxxxxxx&userName=xxxxxxxxxxx&password=xxxxxxxxxxx&grant_type=password&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56" https://xxxxxxxxxxx.e-kreta.hu/idp/api/v1/Token

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Поскольку ваш curl -d (просто простой POST) работает, вам нужно записать свои данные в тело запроса, а не в заголовок Authorization, как он у вас есть.Я думаю, что это должно сделать это:

string IntId = "suli";
var lekeres = WebRequest.Create("https://xxxx.e-kreta.hu/idp/api/v1/Token") as HttpWebRequest;
lekeres.Method = "POST";
string adatokkal = "institute_code=" + IntId + "&userName=" + azonosito + "&password=" + jelszo + "&grant_type=password&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56";
 byte[] byteArray = Encoding.UTF8.GetBytes(postData);

// Set the ContentType property of the WebRequest.  
lekeres.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.  
lekeres.ContentLength = byteArray.Length;

// Get the request stream.  
Stream dataStream = lekeres.GetRequestStream();
// Write the data to the request stream.  
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.  
dataStream.Close();
var response = lekeres.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
    Console.WriteLine(responseFromServer);
}
0 голосов
/ 12 апреля 2019

Вы всегда можете просто использовать веб-клиент:

                using (WebClient client = new WebClient())
                {
                    string adatokkal = "https://xxxx.e-kreta.hu/idp/api/v1/Token?institute_code=" + IntId + "&userName=" + azonosito + "&password=" + jelszo + "&grant_type=password&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56";
                    string Response = client.DownloadString(new Uri(AH_Data_Url));
                }

Или HTTP-клиент

            var client = new HttpClient
            {
                BaseAddress = new Uri("https://xxxx.e-kreta.hu")
            };
            var request = new HttpRequestMessage(HttpMethod.Post, "/idp/api/v1/Token");

            var formData = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("institute_code", IntId )
                new KeyValuePair<string, string>("userName", azonosito  )
                // Add the rest here
            };


            request.Content = new FormUrlEncodedContent(formData);
            var response = client.SendAsync(request).Result;

            if (response.IsSuccessStatusCode == true)
            {
                var responseContent = response.Content;
                string responsestring = responseContent.ReadAsStringAsync().Result;
            }
            else
            {

            }

Если вам нужно авторизовать ваш запрос, вы должны добавить что-то вроде

        var byteArray = new UTF8Encoding().GetBytes("Client ID" + ":" + "Client Secret");
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...