2016-02-17 7 views
5

Ich verwende Akka Http 2.4.1, um eine https Anfrage an die Twitter API zu senden.Wie kann man application/x-www-form-urlencoded HttpHeader in Akka-http 2.4.1 einbinden?

Entsprechend ihrer documentation benötige ich zwei httpheaders. Nämlich, Autorisierung und ContentType.

ihre Dokumente zu zitieren:

Der Antrag mit dem Wert von application/x-www-form-urlencoded einen Content-Type-Header enthält; charset = UTF-8.

Hier ist mein 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`)) 

Wie kann ich die Content-Type Header mit dem Wert application/x-www-form-urlencoded;charset=UTF-8 mit Akka-http 2.4.1 enthalten?

+1

Content-Type wird eingestellt eingestellt werden automatisch basierend auf dem Entitätstyp, der in der Anfrage enthalten ist. In Ihrem Fall setzen Sie den Inhaltstyp http-Entitäten auf 'text/plain (UTF-8)'. – cmbaxter

+0

Danke für die zusätzliche Erklärung. Hilfreich! – rodoherty1

Antwort

14

Ich denke, wenn Sie den entity Wert auf Ihrem HttpRequest-FormData wie so ändern:

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

Dann sollten Sie die Content-Type erhalten automatisch für Sie application/x-www-form-urlencoded;charset=UTF-8

Verwandte Themen