2016-03-24 4 views
1

У меня есть служба, которая работает как прокси-сервер, вы можете получить через нее веб-страницы. Например через телнетHTTPS через HTTP-прокси

GET http://example.com HTTP/1.1 
Host: example.com 

Но если я хочу скачать HTTPS страницы я должен сделать следующий

GET https://example.com HTTP/1.1 
Host: example.com 
Https-Header: true 

И я хочу написать клиента SCALA для этого сервиса с помощью клиента Apache HTTP, используя службу как прокси-сервер хост.

private val DefaultProxy = new HttpHost("service host", port) 
private val DefaultClient = 
HttpClientBuilder.create(). 
    setProxy(DefaultProxy). 
    build() 

Я могу успешно загрузить HTTP-страниц, но когда я пытаюсь загрузить HTTPS страницы, апач клиент делает запрос CONNECT к прокси-серверу, и ответ с ошибкой, потому что служба может работать только с запросами GET. Как я могу заставить клиента apache работать с https-страницами, например с http, это значит, что отправить запрос GET на прокси-сервер, а не CONNECT?

ответ

0

Я выясню решение.

Я пишу пользовательские HttpRoutePlanner, которые всегда обеспечивают не безопасный маршрут, а затем клиент работы Apache с HTTPS ссылаются как с HTTP ссылки, есть код HttpRoutePlanner

private def routePlanner(proxy: HttpHost) = new HttpRoutePlanner() { 

    def determineRoute(target: HttpHost , 
        request: HttpRequest, 
        context: HttpContext) = { 
    new HttpRoute(target, null, proxy, false) 
    } 
} 
1

Для загрузки веб-страницы HTTPS таким же образом, чем HTTP один с телнет вам необходимо сначала установить соединение SSL/TLS:

OpenSSL s_client -connect www.somesite: 443

[ смотреть SSL сертификат подробности прокручивать]

GET /index.html HTTP/1.1

Ведущий: www.somesite

Пример из https://www.bearfruit.org/2008/04/17/telnet-for-testing-ssl-https-websites/

Для Скале возможно, что может помочь вам: https://github.com/scalaj/scalaj-http

HTTPS является HTTP через SSL/TLS, так что вам нужно что-то, чтобы установить SSL/TLS защищенного туннеля на веб-сайт, то вы можете отправьте свой HTTP-запрос.