0

I am having trouble connecting to the Evernote API using the OAuth wrapper bundled with Play 2.6.10 WS.

I am currently using sbt 0.13.15, Oracle JDK 1.8, and Scala 2.12.3.

The relevant piece of code from my OAuth Play controller:

import play.api.libs.oauth._

val KEY = ConsumerKey("KEY", "SECRET")

val EVERNOTE = OAuth(
    ServiceInfo(
        "https://sandbox.evernote.com/oauth",
        "https://sandbox.evernote.com/oauth",
        "https://sandbox.evernote.com/OAuth.action",
        key = KEY
    ),

    use10a = false
)

// Step 1: Request temporary token
EVERNOTE.retrieveRequestToken(CALLBACK_URL) match {
    case Right(t: RequestToken) =>
        // Step 2: Request user authorization; pass temporary token from Step 1
        // Also, store temporary token and secret for later use
        Redirect(EVERNOTE.redirectUrl(t.token)).withSession("token" -> t.token, "secret" -> t.secret)

    // TODO: check this out!
    case Left(e) => throw e
}

The application crashes due to the exception thrown from the Either returned by retrieveRequestToken. The exact exception is:

OAuthCommunicationException: Communication with the service provider failed: Service provider responded in error: 411 (Length Required)

After some snooping around, it seems as if this issue is common in OAuth and requires the POST request headers to contain a Content-Length (typically set to 0). Example: Why I get 411 Length required error?. But as far as I can tell, Play WS does not expose this option from Signpost (OAuth library under the hood), so I was not able to try this solution.

Of course, I may be overlooking something here. Has anyone experienced a similar issue? I just want to make sure before creating a new issue on the WS repo.

Thanks.

Assil Ksiksi
  • 344
  • 1
  • 3
  • 13

1 Answers1

1

Evernote requires content-length for the API calls so I think that's the case.

Getting 411 error bad request in Evernote

kentaro
  • 1,249
  • 2
  • 13
  • 19