Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to include application/x-www-form-urlencoded HttpHeader in Akka-http 2.4.1?

I am using Akka Http 2.4.1 to post a https request to the twitter api.

According to their documentation, I need two httpheaders. Namely, Authorization and ContentType.

To quote their docs:

The request must include a Content-Type header with the value of application/x-www-form-urlencoded;charset=UTF-8.

Here is my code:

val authorization = Authorization(BasicHttpCredentials(key, secret))

/*
   This header is removed from the request with the following explanation!
   "Explicitly set HTTP header 'Content-Type: application/x-www-form-urlencoded;' is ignored, illegal RawHeader"
*/
val contentType = RawHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")

Http().singleRequest(
    HttpRequest(
        uri = Uri("https://api.twitter.com/oauth2/token"),
        method = HttpMethods.POST,
        headers = List(authorization, contentType),
        entity = HttpEntity(`text/plain(UTF-8)`, "grant_type=client_credentials"),
        protocol = HttpProtocols.`HTTP/1.1`))

How can I include the Content-Type header with the value application/x-www-form-urlencoded;charset=UTF-8 using Akka-http 2.4.1?

like image 859
Rob O'Doherty Avatar asked Feb 17 '16 22:02

Rob O'Doherty


1 Answers

I think if you change the entity value on your HttpRequest to FormData like so:

HttpRequest(
    uri = Uri("https://api.twitter.com/oauth2/token"),
    method = HttpMethods.POST,
    headers = List(authorization),
    entity = FormData("grant_type" -> "client_credentials").toEntity,
    protocol = HttpProtocols.`HTTP/1.1`)
)

Then you should get the Content-Type to be automatically set for you to application/x-www-form-urlencoded;charset=UTF-8

like image 192
cmbaxter Avatar answered Sep 19 '22 17:09

cmbaxter