美好的一天,
我正在关注本文,以创建一个自定义协议并发表一个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/");
我相信我犯了一些错误并导致了这个问题。请对此提供建议。