Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Basic HTTP Authentication in Casablanca

I'm trying to modify the Casablanca tutorial to include basic HTTP authentication to access the Prosper API:

auto fileStream = std::make_shared<ostream>();

// Open stream to output file.
auto requestTask = fstream::open_ostream(U("results.html")).then([=](ostream outFile)
{
    *fileStream = outFile;

    // Create http_client to send the request.
    http_client_config config;
    credentials creds( "username", "password" );
    config.set_credentials( creds );
    http_client client( U( "https://api.prosper.com/" ), config );

    // Build request URI and start the request.
    uri_builder builder(U("/api/Listings/"));

    return client.request( methods::GET, builder.to_string() );
})

...

Unfortunately, I keep getting error 401 - unauthorized. However, I can access the page in the browser via https://username:[email protected]/api/Listings/, and I can use Casablanca to get to regular web pages that don't need authentication.

I'm new to REST and web stuff in general, and the documentation is useless - http_client_config is "used to set the possible configuration options." No kidding. I'm not even sure if I'm using the right classes - these things just kind of looked right.

How do I add basic authentication to an http_client request in Casablanca?

like image 592
GraphicsMuncher Avatar asked Jul 12 '15 19:07

GraphicsMuncher


People also ask

How can I pass the basic HTTP authentication or token authentication?

Basic HTTP authentication You need to generate a Base64-encoded credential with the Customer ID and Customer Secret provided by Agora and pass the credential to the Authorization parameter in the request header.

How do I Authenticate an HTTP request?

A client that wants to authenticate itself with the server can then do so by including an Authorization request header with the credentials. Usually a client will present a password prompt to the user and will then issue the request including the correct Authorization header.


1 Answers

You need to add a header to your request which contains base64 of your "username:password" for example

// Please check how to convert into base64

XYZtaW46Wr6yZW0xMAXY = base64("username:password")

// Creating http_client
http_client_config config;
credentials cred(L"username", L"Password");
config.set_credentials(cred);
http_client client(U("https://serverip"),config);
// create header
http_request req(methods::GET);
// Add base64 result to header
req.headers().add(L"Authorization", L"Basic XYZtaW46Wr6yZW0xMAXY");
req.set_request_uri(L"/api/json/xyz");
pplx::task<http_response> responses = client.request(req);
pplx::task<web::json::value> jvalue = responses.get().extract_json();
wcout << jvalue.get().to_string();
like image 61
Dharmateja Challa Avatar answered Oct 17 '22 07:10

Dharmateja Challa