2016-03-24 20 views
1

Ich habe Service, der wie ein Proxy funktioniert, können Sie Webseiten durch sie erhalten. Zum Beispiel über TelnetHTTPS über HTTP-Proxy

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

Aber wenn ich herunterladen möchte https-Seite, ich sollte die folgende

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

tun Und ich will scala-Client für diesen Dienst mit Apache HTTP-Client schreiben, wie ein Proxy-Dienst Gastgeber.

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

Ich kann erfolgreich herunterladen http-Seiten, aber wenn ich versuche, https-Seiten, Apache-Client stellt CONNECT-Anforderung an den Proxy zum Download, und es Antwort mit Fehlern kann Ursache Dienst arbeitet nur mit GET-Anfragen. Wie kann ich Apache-Client arbeiten mit https-Seiten wie mit http, bedeutet das Senden GET-Anfrage an Proxy, nicht CONNECT?

Antwort

0

Ich finde eine Lösung.

ich benutzerdefinierte HttpRoutePlanner schreiben, die nicht immer sichere Route an, und dann mit https Apache Client Arbeit verbinden wie mit HTTP-Link gibt es einen HttpRoutePlanner Code

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

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

Um eine https Webseite in der gleichen Weise als ein http ein mit telnet herunterladen Sie müssen zuerst die ssl/tls-Verbindung herzustellen:

openssl s_client -connect www.somesite: 443

[ beobachten das sSL-Zertifikat Details blättern durch]

GET /index.html HTTP/1.1

Host: www.somesite

Beispiel von https://www.bearfruit.org/2008/04/17/telnet-for-testing-ssl-https-websites/

Für scala vielleicht, dass können Sie helfen: https://github.com/scalaj/scalaj-http

HTTPS ist HTTP über SSL/TLS, so müssen Sie etwas, um die SSL/TLS sicheren Tunnel auf der Website zu schaffen, dann können Sie Senden Sie Ihre HTTP-Anfrage.