2016-02-17 9 views
5

Używam Akka Http 2.4.1 do wysyłania żądania https do api aplikacji Twitter.Jak dołączyć aplikację/x-www-form-urlencoded HttpHeader do Akka-http 2.4.1?

Zgodnie z ich documentation, potrzebuję dwóch nagłówków http. Mianowicie Autoryzacja i ContentType.

Cytując swoje dokumenty:

Wniosek musi zawierać nagłówek Content-Type z wartością application/x-www-form-urlencoded; charset = UTF-8.

Oto mój kod:

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`)) 

Jak mogę zawierać nagłówek o wartości application/x-www-form-urlencoded;charset=UTF-8 wykorzystaniem Akka-http 2.4.1 Content-Type?

+1

Content-Type zostanie ustawiona automatycznie w oparciu o typ jednostki uwzględniony w żądaniu. W twoim przypadku ustawiasz typ zawartości encji http na "text/plain (UTF-8)". – cmbaxter

+0

Dzięki za dodatkowe wyjaśnienie. Pomocny! – rodoherty1

Odpowiedz

14

myślę, że jeśli zmienić wartość entity na swojej HttpRequest do FormData tak:

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`) 
) 

Następnie należy uzyskać Content-Type być automatycznie ustawione, aby application/x-www-form-urlencoded;charset=UTF-8