Использование Finagle Http-клиента для запросов https

Я пытаюсь получить данные из веб-службы REST. Пока я могу получить данные правильно, если я не использую HTTPS с этим кодом, работающим как ожидалось -

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)

Но когда я пытаюсь получить те же данные из запроса https (по этой ссылке)

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)

Я получаю ошибку

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

Я могу свернуть ту же самую конечную точку с портом 443, и он возвращает правильный результат. Может кто-нибудь, пожалуйста, помогите мне решить проблему?

1 ответ

Несколько вещей, чтобы проверить:

withTls(host)

должно быть именем хоста, указанным в сертификате сервера (в отличие от ip, например)

ты можешь попробовать:

Http.client.withTlsWithoutValidation

чтобы проверить выше.

Также вы можете захотеть проверить, проверяет ли сервер, что установлен заголовок хоста, и если да, вы можете включить его:

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)

больше информации о заголовке узла: Что такое заголовок узла http?

Другие вопросы по тегам