2016-05-13 1 views
0

Ich kann https://pushover.net/ mit Chrome-Browser zu bekommen, aber wenn ich versuche, auf die gleiche Website mit Java zu erreichen, um die Verbindung zu der API und senden Daten schlägt fehl.http-Post durch Proxy funktioniert nicht

dies ist mein Code

HttpClient httpClient = (HttpClient) HttpClientBuilder.create()/*.setProxy(proxy)*/.build(); 
HttpPost post = new HttpPost("https://api.pushover.net/1/messages.json"); 
List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 

nvps.add(new BasicNameValuePair("token", apiToken)); 
nvps.add(new BasicNameValuePair("user", userKey)); 
nvps.add(new BasicNameValuePair("message", message)); 

post.setEntity(new UrlEncodedFormEntity(nvps, Charset.defaultCharset())); 
//point A 

HttpResponse deviceResponse = httpClient.execute(post); 
//point B 

es wird Punkt A, aber dann dauert ewig zu Punkt B zu bekommen und es gibt eine Ausnahme, wenn es funktioniert. Die Ausnahme ist org.apache.http.conn.HttpHostConnectException: Eine Verbindung mit api.pushover.net:443 (api.pushover.net/108.59.13.232] schlug fehl: Anschluss Timer aus: connect

Ich habe versucht. das gibt mir ein javax.net.ssl.SSLHandshakeException einen Proxy mit dem folgenden Code über den Rest

HttpHost proxy = new HttpHost("url",9090,"https"); 
httpClient = (HttpClient) HttpClientBuilder.create().setProxy(proxy).build(); 

mit: Remote Host geschlossen Verbindung während der Handshake

ich dann auch versucht, das Hinzufügen

Authenticator.setDefault(
    new Authenticator() { 
     @Override 
     public PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(
       authUser, authPassword.toCharArray()); 
     } 
    } 
); 

System.setProperty("http.proxyUser", authUser); 
System.setProperty("http.proxyPassword", authPassword); 

aber es gibt die gleiche SSLHandshakeException.

Ich habe Dinge beim Erstellen von Keystores gesehen, aber das funktioniert nur auf meinem Rechner, ich möchte etwas, das im Code funktioniert und mir erlaubt, diese App auf 1000 von Maschinen zu implementieren, ohne extra manuelle Konfiguration zu jedem zu tun .

Gibt es irgendetwas Besseres, was ich tun sollte?

Antwort

0

Ich habe es mit diesem Code anstelle der httpClient am Anfang behoben.

HttpHost proxy = new HttpHost(PROXY_URL, 8080); 
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); 

AuthCache authCache = new BasicAuthCache(); 
CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
credsProvider.setCredentials(new AuthScope(PROXY_URL, 8080, AuthScope.ANY_HOST, "ntlm"), new NTCredentials(authUser, authPassword, "",PROXY_DOMAIN)); 
HttpClientContext context = HttpClientContext.create(); 
context.setCredentialsProvider(credsProvider); 
context.setAuthCache(authCache); 

httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).setRoutePlanner(routePlanner).build(); 
Verwandte Themen