ocwirk
ocwirk

Reputation: 1089

Using Finagle Http client for https requests

I am trying to get some data from a REST web service. So far I can get the data correctly if I don't use HTTPS with this code working as expected -

val client = Http.client.newService(s"$host:80")

val r = http.Request(http.Method.Post, "/api/search/") 
r.host(host)    
r.content = queryBuf
r.headerMap.add(Fields.ContentLength, queryBuf.length.toString)
r.headerMap.add("Content-Type", "application/json;charset=UTF-8")

val response: Future[http.Response] = client(r)

But when I am trying to get the same data from https request (Following this link)

val client = Http.client.withTls(host).newService(s"$host:443")

val r = http.Request(http.Method.Post, "/api/search/")
r.headerMap.add("Cookie", s"_elfowl=${authToken.elfowlToken}; dc=$dc")
r.host(host)    
r.content = queryBuf
r.headerMap.add(Fields.ContentLength, queryBuf.length.toString)
r.headerMap.add("Content-Type", "application/json;charset=UTF-8")
r.headerMap.add("User-Agent", authToken.userAgent)

val response: Future[http.Response] = client(r)

I get the error

Remote Info: Not Available at remote address: searchservice.com/10.59.201.29:443. Remote Info: Not Available, flags=0x08

I can curl the same endpoint with 443 port and it returns the right result. Can anyone please help me troubleshoot the issue ?

Upvotes: 2

Views: 3691

Answers (1)

Remi Thieblin
Remi Thieblin

Reputation: 186

Few things to check:

withTls(host)

needs to be the host name that is in the certificate of server (as opposed to the the ip for instance)

you can try:

Http.client.withTlsWithoutValidation

to verify the above.

Also you might want to verify if the server checks that the host header is set, and if so, you might want to include it:

val withHeader = new SimpleFilter[http.Request, http.Response] {
  override def apply(request: http.Request, service: HttpService): Future[http.Response] = {
    request.host_=(host)
    service(request)
  }
}

withHeader.andThen(client)

more info on host header: What is http host header?

Upvotes: 2

Related Questions