Авторизуйте HTTP-запросы перед вызовом [in-sequence запросов] C # - PullRequest
0 голосов
/ 13 марта 2019

Мне нужно авторизовать каждый HTTP-запрос перед его вызовом, если только токен доступа еще не истек.

Я хочу: 1. Получить токен доступа в первый раз 2. Проверить, не был ли токен 't expire 3. Завернуть возвращенный ключ в следующем HTTP-запросе

Код: Сначала я использую System.Net.WebRequest для HTTP-запросов, затем запрос возвращает токен, и я заключаю его взапрос.

HTTP-запрос:

        /// <summary>
    /// HTTP request without authintcation
    /// </summary>
    /// <param name="response">Returned HTTP Response from the request</param>
    /// <param name="req_url">Request URL to call</param>
    /// <param name="req_method">Request Method [GET, POST, PUT, DELETE, etc ...]</param>
    /// <param name="req_body">Request Body [JSON]</param>
    /// <returns>True if the request was successful; false otherwise.</returns>


    private static bool HTTP_Request_Web(out HttpWebResponse response, string req_url,
                                      string req_method, string req_body)
    {
        response = null;

        try
        {
            //Create request to URL.
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(req_url);

            //Set request headers.
            request.KeepAlive = true;
            //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
            request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
            request.ContentType = "application/json";
            request.Accept = "*/*";
            request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
            request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9,ar;q=0.8");

            //Set request method
            request.Method = req_method;

            // Disable 'Expect: 100-continue' behavior. 
            request.ServicePoint.Expect100Continue = false;

            //Set request body.
            //string body = @"{
            //                 ""username"":""XXXX"",
            //                 ""password"":""XXXXXXX""
            //                }";
            byte[] postBytes = Encoding.UTF8.GetBytes(req_body);
            request.ContentLength = postBytes.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(postBytes, 0, postBytes.Length);
            stream.Close();

            //Get response to request.
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException e)
        {
            //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found)
            if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response;
            else return false;
        }
        catch (Exception)
        {
            if (response != null) response.Close();
            return false;
        }

        return true;
    }

После этого я использую токен, в следующем запросе, как на картинке ниже: Access Token

1 Ответ

0 голосов
/ 07 июля 2019

Я использовал фиксированный токен интеграции от Magento.

...