Добрый день,
Я следую этой статье, чтобы создать собственный протокол и сделать 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
URL-адрес на myhttps
:
HttpClient httpclient = new HttpClient ();PostMethod httppost = new PostMethod ("my https://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/");
Я считаю, что допустила ошибку и стала причиной этой проблемы. Пожалуйста, сообщите об этом.