2017-07-31 99 views
0

我有下面的代码片断:的ConnectException一台计算机上而不是在另一个

private static String post(String msg) throws Exception { 
    URL urlObj = new URL(host); 
    HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); 

    System.out.println(String.format("Send to url [%s]", urlObj)); 
    System.out.println(String.format("Port [%s]", con.getURL().getDefaultPort())); 
    System.out.println(String.format("POST data [%s]", msg)); 

    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); 

    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(msg); 
    wr.flush(); 
    wr.close(); 

    int respCode = con.getResponseCode(); 
    System.out.println(String.format("Response code [%s]", respCode)); 

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String response = "", s; 
    while ((s = in.readLine()) != null) { 
     response += s; 
    } 
    in.close(); 

    return response; 
} 

此方法是一个程序,它接受一个YYYYMMDD日期字符串,把它封装在JSON的一部分,加密在JSON串base 64,然后将其作为查询发送到https Web服务。

我在我的个人笔记本电脑上运行程序,连接到互联网,并且能够成功查询和处理结果。我还可以访问Web服务URL并手动提交查询。

然而,我的服务器,通过代理连接到互联网上,我仍然可以手动通过浏览器查询的Web服务,但是当我运行同一程序现在我得到一个异常:

java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:625) 
    at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) 
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:933) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1092) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
    at com.chinkai.EvaWSAgent.post(EvaWSAgent.java:87) 
    at com.chinkai.EvaWSAgent.retrieve(EvaWSAgent.java:50) 
    at com.chinkai.EvaWSAgent.main(EvaWSAgent.java:155) 

...其中第87行是

DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 

我不知道如何解决这个,或者如果有什么办法可以重写这个方法来解决,或者如果它甚至我在首位的问题(设置在代理中,也许?)不知道这是否是提出这个问题的正确位置,无论如何,我都在努力运气。

+0

请输入,如果你没有连接到URL,则意味着特定的URL访问你的服务器堵塞 –

回答

1

如果服务器通过代理连接到互联网,则需要将其设置在您的应用程序中,例如,像这样:

URL urlObj = new URL(host); 

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.yourdomain.com", 3128)); 
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(proxy); 
0

您可以按照其他人的建议在代码中设置代理。您还可以在运行Java应用程序时从命令行对其进行设置。输入命令后,在您的服务器的telnet 的命令提示符

java -jar myapp.jar -Dhttp.proxyHost=proxy.mycorp/com -Dhttp.proxyPort=8080 
相关问题