2011-10-10 41 views
3

我使用的Apache HttpClient 4,它工作正常。唯一不起作用的是自定义端口。看起来像根目录被抓取并且端口被忽略。Apache HttpClient和自定义端口

HttpPost post = new HttpPost("http://myserver.com:50000"); 
HttpResponse response = httpClient.execute(post); 

如果没有定义端口,则http-和https连接可以正常工作。 该计划注册表被定义如下:

final SchemeRegistry sr = new SchemeRegistry(); 

final Scheme http = new Scheme("http", 80, 
     PlainSocketFactory.getSocketFactory()); 
sr.register(http); 

final SSLContext sc = SSLContext.getInstance(SSLSocketFactory.TLS); 
    sc.init(null, TRUST_MANAGER, new SecureRandom()); 
SSLContext.setDefault(sc); 

final SSLSocketFactory sf = new SSLSocketFactory(sc, 
     SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

final Scheme https = new Scheme("https", 443, sf); 
    sr.register(https); 

我如何可以自定义端口的请求?

+0

问题是什么? –

+0

Erm ...当您的套接字在端口80和443上侦听时,您如何连接到50000端口?如果这不是'最后的Scheme http = new Scheme(“http”,50000,PlainSocketFactory.getSocketFactory()); '? –

+0

我也这么认为,但方案端口只是没有给出端口时的标准。如果明确设置了端口,则将使用该端口而不是端口。 – Stephan

回答

1

问题是服务器不理解HTTP 1.1分块传输。我通过使用ByteArrayEntity缓存数据,一切正常。

所以自定义端口可以使用上面提到的代码。

7

一个建议是尝试使用HttpPost(URI address)而不是String参数。您可以明确地设置端口:

URI address = new URI("http", null, "my.domain.com", 50000, "/my_file", "id=10", "anchor") 
HttpPost post = new HttpPost(address); 
HttpResponse response = httpClient.execute(post); 

不能保证这会工作,但试试看。

+0

我试过了,但仍然收到400个错误的请求。 – Stephan

+4

如果您收到“400错误请求”,这意味着您实际连接到服务器,发送请求并获得响应。检查你的服务器日志,看看问题可能是什么。 –

+0

嗯,它的工作。 – Bob