自定义协议不适用于Apache Commons协议

时间:2019-05-08 03:34:42

标签: java ssl protocols apache-commons apache-commons-httpclient

美好的一天,

我正在关注本文,以创建一个自定义协议并发表一个https帖子。

https://hc.apache.org/httpclient-3.x/sslguide.html

从步骤2开始,我正在使用以下代码:

httpclient.getHostConfiguration().setHost("www.whatever.com", 443, myhttps);

但是,当我执行httppost方法时,我仍然达到403禁止。我以为这样可以。

因此,我进入步骤3,并编写以下代码:

Protocol.registerProtocol("https", 
new Protocol("https", new MySSLSocketFactory(), 443));

它的工作,我得到200响应代码。 意味着我们只需要注册协议就可以使HttpPost加载包含服务器证书的MySSLSocketFactory。仅有httpclient.getHostConfiguration().setHost()不足以使httpPost加载MySSLSocketFactory。如果我错了,请纠正我。

但是在第3步中,它提到我们可以为特定的协议指示符注册自定义协议。所以我去了:

Protocol.registerProtocol("myhttps", 
new Protocol("https", new MySSLSocketFactory(), 443));

然后将我的httpPost网址更改为myhttps

HttpClient httpclient = new HttpClient(); PostMethod httppost = new PostMethod(“ myhttps://www.whatever.com/”);

但是,我仍然被禁止使用403。除非,我同时注册https和:

Protocol.registerProtocol("myhttps", 
    new Protocol("https", new MySSLSocketFactory(), 443));
Protocol.registerProtocol("https", 
    new Protocol("https", new MySSLSocketFactory(), 443));

然后它只能工作。

如果我仅注册https,然后用myhttps打电话,我会打java.lang.IllegalStateException: unsupported protocol: 'myhttps'.

Protocol.registerProtocol("https", 
        new Protocol("https", new MySSLSocketFactory(), 443));
PostMethod httppost = new PostMethod("myhttps://www.whatever.com/");

我相信我犯了一些错误并导致了这个问题。请对此提供建议。

0 个答案:

没有答案