DSS API - 403 error when using the POST API CALL

Could you kindly assist me guide the client on the below request.

Case Details : We are getting a 403 error when using the POST API CALL to https://selectapi.datascope.refinitiv.com/RestApi/v1/
in order to get a login token.
User: 9032560

Further details :

Below is the code we're using and the error message we're getting back.

Code:

string serviceUrl = serviceBaseURL + @Authentication/RequestToken;

//string token = string.Empty;


string body = "{{\"Credentials\": {{\"Username\": \"{0}\",\"Password\": \"{1}\"}}}}";

body = string.Format(body, username, password);

var proxy = new WebProxy

{

Address = new Uri(proxyURL),

BypassProxyOnLocal = false,

UseDefaultCredentials = false,

};


// Now create a client handler which uses that proxy

var httpClientHandler = new HttpClientHandler

{

Proxy = proxy,

};


using (var httpClient1 = new HttpClient(httpClientHandler))

{

httpClient1.Timeout = new TimeSpan(0, 60, 0);

using (var request = new HttpRequestMessage(new HttpMethod("POST"), serviceUrl))

{

request.Headers.TryAddWithoutValidation("accept", "*/*");

request.Content = new StringContent(body);

request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

HttpResponseMessage response = httpClient1.SendAsync(request).Result;


if (response.IsSuccessStatusCode)

{

string result = response.Content.ReadAsStringAsync().Result;

dynamic dynListEntries = JsonConvert.DeserializeObject(result);

token = dynListEntries.value.ToString();

}

else

{

Dts.TaskResult = (int)ScriptResults.Failure;

Dts.Events.FireError(2, "Token", "Failed to get token", "", 0);

}

}

}



Error:


System.AggregateException: One or more errors occurred. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)

at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)

--- End of inner exception stack trace ---

--- End of inner exception stack trace ---

at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)

at ST_ddc11e0dcb914ab6981ed8578445d403.ScriptMain.Main()

---> (Inner Exception #0) System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)

at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)

--- End of inner exception stack trace ---<---

at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)

at ST_ddc11e0dcb914ab6981ed8578445d403.ScriptMain.Main() Exception: System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)

at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)

--- End of inner exception stack trace ---

Best Answer

  • Gurpreet
    Gurpreet admin
    Answer ✓

    Ask the client to try this code:

    class Program
    {
    static async Task Login(HttpClient httpClient)
    {
    using StringContent jsonContent = new(
    JsonSerializer.Serialize(new {
    Credentials = new {
    Username = "****",
    Password = "****"
    }
    }), Encoding.UTF8, "application/json");


    using HttpResponseMessage response = await httpClient.PostAsync("Authentication/RequestToken", jsonContent);

    if (!response.IsSuccessStatusCode) {
    Console.WriteLine("Error, unable to get token");
    Console.WriteLine(response.Content!.ReadAsStringAsync());
    return;
    }

    var strResponse = await response.Content.ReadAsStringAsync();
    // deserialize json string response to JsonNode object
    var data = JsonSerializer.Deserialize<JsonNode>(strResponse);
    Console.WriteLine(data);
    }


    static async Task Main(string[] args)
    {
    HttpClient sharedClient = new()
    {
    BaseAddress = new Uri("https://selectapi.datascope.refinitiv.com/RestApi/v1/"),
    };

    await Login(sharedClient);
    Console.WriteLine("Done");
    }
    }

Answers

  • 403 error brief is shared to the client and also requested them to check this error with their Network team while LSEG is reviewing .

Welcome!

It looks like you're new here. Sign in or register to get started.

Welcome!

It looks like you're new here. Sign in or register to get started.