Java 在静态完成大多数设置时使用不同的http方案端口

Java 在静态完成大多数设置时使用不同的http方案端口,java,httpclient,Java,Httpclient,使用:org.apache.http 我使用以下代码下载文件,大多数url设置都是静态完成的,以保存每次创建对象的过程 private static final HttpClient httpClient; static { HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolPara

使用:org.apache.http

我使用以下代码下载文件,大多数url设置都是静态完成的,以保存每次创建对象的过程

    private static final HttpClient httpClient;

static {
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
    HttpProtocolParams.setUseExpectContinue(params, false);  
    HttpConnectionParams.setConnectionTimeout(params, 10000);
    HttpConnectionParams.setSoTimeout(params, 10000);
    ConnManagerParams.setMaxTotalConnections(params, 100);
    ConnManagerParams.setTimeout(params, 30000);

    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80)); //TODO port and schema should be coming from the strings file
    ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
    httpClient = new DefaultHttpClient(manager, params);
    //httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
}
我可以使用

private HttpUrlRequest(String host, int port, String path, List<NameValuePair> query,  List<NameValuePair> post)

是静态指定的,我不也必须更改端口号吗?如何解决这个问题?

我猜scheme注册表与HashMap非常相似。如果我是对的,只需注册一组新的参数,就可以更改(例如)http的方案

因此,无论您在配置文件中读取到什么,您都可以简单地重复调用

registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
使用不同的端口号

问题:
注册表
静态
块中的局部变量。解决方案:做

static SchemeRegistry registry; 
静态
块之外(最好在前面),以便以后能够访问变量err class字段

要使此工作正常,还需要更改行

SchemeRegistry registry = new SchemeRegistry();


如果您想从另一个类进行注册更改,可以将注册表设置为公共的,或者给它一个静态访问器或其他东西。

我猜scheme注册表与HashMap非常相似。如果我是对的,只需注册一组新的参数,就可以更改(例如)http的方案

因此,无论您在配置文件中读取到什么,您都可以简单地重复调用

registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
使用不同的端口号

问题:
注册表
静态
块中的局部变量。解决方案:做

static SchemeRegistry registry; 
静态
块之外(最好在前面),以便以后能够访问变量err class字段

要使此工作正常,还需要更改行

SchemeRegistry registry = new SchemeRegistry();


如果您想从另一个类进行注册更改,您可以将注册表设置为公共的,或者给它一个静态访问器或其他东西。

方案指定的端口是默认端口,而不一定是实际连接中使用的端口。可以在每个请求URL中指定端口。例如,如果方案默认端口为80,但请求URL为,则使用8080。如果URL中未指定端口,则使用默认端口。

方案指定的端口是默认端口,而不一定是实际连接中使用的端口。可以在每个请求URL中指定端口。例如,如果方案默认端口为80,但请求URL为,则使用8080。如果URL中未指定端口,则使用默认端口。

哦,好的,谢谢。因此,不需要修改代码。仅供参考,如果我允许方案更改,比如说更改为https,那么我是否需要创建@Carl提到的新方案,或者当我在连接时将https作为方案传递时,系统是否能够解决所有这些问题?您可以注册多个方案,因此,如果注册http和https方案,然后使用https://URL创建连接,则使用https方案。哦,好的,谢谢。因此,不需要修改代码。仅供参考,如果我允许方案更改,比如说更改为https,那么我是否需要创建@Carl提到的新方案,或者当我在连接时将https作为方案传递时,系统是否能够解决所有这些问题?您可以注册多个方案,因此,如果注册http和https方案,然后使用https://URL创建连接,则使用https方案。