2016-10-10 3 views
1

Ich versuche, eine Get-Anfrage in Java mit HttpURLConnection zu machen. Die Antwort ist 200, wenn ich in meinem Heimnetzwerk bin, aber auf der Firma nework bekomme ich einen Fehler beim Verbindungsaufbau (SocketTimeoutException). Ich habe das Timeout auf 20 Sekunden geändert und bekomme diesen Fehler nach ein paar Sekunden immer noch. Der Link ist verfügbar, wenn ich ihn im Browser im selben Netzwerk sehe, in dem ich die Zeitüberschreitung vom Java-Code bekomme, also könnte es immer noch ein Firewall-Problem sein? Oder etwas anderes? Hier ist mein Code:Server Timeout auf Http GET auf bestimmten Netzwerk

String USER_AGENT = "Mozilla/5.0"; 
    URL obj = new URL("http://jsonplaceholder.typicode.com/posts/1"); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setConnectTimeout(20000); 
    con.setRequestMethod("GET"); 
    con.setRequestProperty("User-Agent", USER_AGENT); 
    int responseCode = con.getResponseCode(); 
    System.out.println("GET Response Code :: " + responseCode); 
+0

liefert Ihr Unternehmen einen Proxy? – 0x44656e6e795279616e

+0

Ich habe nicht viel Erfahrung mit Proxies. Wenn es notwendig ist, bin ich sicher, dass sie es tun, aber wenn ich die Antwort in meinem Chrome-Browser im selben Netzwerk sehen kann, könnte das immer noch ein Problem sein? –

+2

Es könnte sicherlich. Wenn Sie Chrome unter Windows, wie IE/Edge, meinen, wird die System- (Windows) Proxy-Einstellung verwendet, die automatisch von der WPAD- und/oder Gruppenrichtlinie festgelegt werden kann, oder wenn es sich um einen vom Unternehmen bereitgestellten Computer handelt. Wenn das Unternehmensnetzwerk die Verwendung des Proxy für HTTP erfordert, wie viele dies für verschiedene gute oder schlechte (und hässliche!) Gründe tun, dann verwendet Chrome die Proxy-Einstellung und funktioniert, aber Java verwendet es nicht und schlägt fehl. Wenn Sie nicht in Windows arbeiten, geben Sie an, woran Sie sind. –

Antwort

0

Dies ist in der Regel ein Fehler durch eine Firewall im Netzwerk Ihres Unternehmens erzeugt. Wenn Ihr Browser jedoch ins Internet gelangt, verwendet Ihr Browser einen Proxy (wahrscheinlich den System-Proxy). So haben Sie die JVM über die Standard-Java network properties parametrisieren, um es das System-Proxy zu machen verwenden:

java -Djava.net.useSystemProxies=true ... 

Oder alternativ herausfinden, welche die System-Proxy-Parameter (Host, Port, Benutzer und Passwort) und Pass sie an die JVM:

java -Dhttp.proxyHost=... -Dhttp.proxyPort=...