我将数据发送到Web服务器的桌面客户端,我似乎无法通过代理服务器来获得。
更新 :试图通过代理服务器进行通信时,我得到一个407 HTTP错误。
当从我的网络服务器下载信息,一切都很好。 一旦用户配置代理服务器(使用对话框我写)下载工作正常。 但是,使用上传数据org.apache.http.client.HttpClient不工作。
我收集来自一个JDialog的信息后,配置与这样的代码的代理服务器。
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", "" + portNumber);
现在,一旦我们这样做,简单的下载做工精细。 举例来说,我有一些代码从我的Web服务器读取一些XML数据(见下文)。 对客户的网络被显示在我的catch块的错误已配置的代理服务器设置之前再一次正确的代理设置都工作得很好。
/**
* Loads a collection of exams from the web site. The URL is determined by
* configuration or registration since it is State specific.
*/
public static int importExamsWS(StringBuilder msg) {
try {
java.net.URL onlineExams = new URL(examURL);
//Parse the XML data from InputStream and store it.
return importExams(onlineExams.openStream(), msg);
}
catch (java.net.UnknownHostException noDNS) {
showError(noDNS, "Unable to connect to proctinator.com to download the exam file.\n"
+ "There is probably a problem with your Internet proxy settings.");
}
catch (MalformedURLException | IOException duh) {
showFileError(duh);
}
return 0;
}
然而,当我尝试将数据发送到Web服务器就好像被忽略了代理服务器的设置和一个IOException被抛出。 即:
org.apache.http.conn.HttpHostConnectException: Connection to http://proctinator.com:8080 refused
现在我知道,8080端口是不会被客户的Web过滤器,因为我们在Web浏览器测试地址。
这是我用于验证用户输入的注册ID码: 更新:现在我也设置在此方法的代理。
//Registered is just an enum with ACTIVE, INACTIVE, NOTFOUND, ERROR
public static Registered checkRegistration(int id) throws IOException {
httpclient = new DefaultHttpClient();
Config pref = Config.getConfig(); //stores user-entered proxy settings.
HttpHost proxy = new HttpHost(pref.getProxyServer(), pref.getProxyPort());
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
URIBuilder builder = new URIBuilder();
String path = "/Proctorest/rsc/register/" + id;
try {
builder.setScheme("http").setHost(server).setPort(8080).setPath(path);
URI uri = builder.build();
System.out.println("Connecting to " + uri.toString());
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpclient.execute(httpget);
System.out.println(response.getStatusLine().toString());
if(response.getStatusLine().getStatusCode()==200) {
String msg = EntityUtils.toString(response.getEntity());
GUI.globalLog.log(Level.INFO, "Server response to checkRegistration(" + id + "): " + msg);
return Registered.stringToRegistered(msg);
}
else {
GUI.globalLog.log(Level.INFO, "Server response status code to checkRegistration: " +
response.getStatusLine().getStatusCode());
return Registered.ERROR;
}
}
catch(java.net.URISyntaxException bad) {
System.out.println("URI construction error: " + bad.toString());
return Registered.ERROR;
}
}
我几乎可以肯定的是,问题是从代理服务器的配置来了,然而对于SystemDefaultHttpClient文档声称它需要使用系统属性http.proxyHost
和http.proxyPort
。 我知道属性已正确设置,但我仍然得到这个认证错误。 查看从我的程序生成的日志给我这样的:
checkRegistration INFO: Server response status code to checkRegistration: 407
如何解决此验证错误?