Недавно мне нужно сделать обертку на интерфейсе клиента, а затем использовать другие системные вызовы от моей компании. Клиентский интерфейс реализован с использованием URL -адреса HTTP. Я хочу использовать пакет HTTPClient для выполнения запросов. В то же время, поскольку запрашиваемый URL -адрес - HTTPS, чтобы избежать необходимости сертификата, я использую класс, чтобы наследовать класс DelaulthTtpClient и игнорировать процесс проверки.
1. Напишите класс Sslclient и наследуйте его HttpClient
пакет com.pcmall.service.sale.miaomore.impl; Импорт java.security.cert.certificateException; Импорт java.security.cert.x509Certificate; импортировать javax.net.ssl.sslcontext; Импорт javax.net.ssl.trustmanager; Импорт javax.net.ssl.x509trustmanager; Import org.apache.http.conn.clientConnectionManager; Импорт org.apache.http.conn.scheme.scheme; Импорт org.apache.http.conn.scheme.schemeregistry; Import org.apache.http.conn.ssl.sslsocketFactory; Импорт org.apache.http.impl.client.defaulthttpclient; // httpclient используется для выполнения запросов HTTPS открытого класса SslClient Extends Defaulthttpclient {public sslclient () выбросит исключение {super (); Sslcontext ctx = sslcontext.getInstance ("tls"); X509trustmanager tm = new x509trustmanager () {@override public void checkclienttrusted (x509certificate [] chain, string authtype) throws setresexception {} @Override public void ceckserverted (x509certificate [] chain, string outtype) X509certificate [] getacceptedIssuers () {return null; }}; ctx.init (null, new Trustmanager [] {tm}, null); Sslsocketfactory ssf = new sslsocketfactory (ctx, sslsocketfactory.ally_all_hostname_verifier); ClientConnectionManager CCM = this.getConnectionManager (); Schemeregistry sr = ccm.getschemeregistry (); Sr.register (новая схема ("https", 443, ssf)); }}2. Напишите класс, который использует HttpClient для отправки запросов POST
пакет com.pcmall.service.sale.miaomore.impl; импортировать java.util.arraylist; импортировать java.util.iterator; импортировать java.util.list; импортировать java.util.map; импортировать java.util.map.entry; Импорт org.apache.http.httpentity; Импорт org.apache.http.httpresponse; Импорт org.apache.http.namevaluepair; Импорт org.apache.http.client.httpclient; Импорт org.apache.http.client.entity.urlencodedFormentity; Импорт org.apache.http.client.methods.httppost; Импорт org.apache.http.message.basicnamevaluepair; Импорт org.apache.http.util.entityutils; /** Класс инструмента для запросов POST с использованием httpclient*/ public class httpclientutil {public String dopost (string url, map <string> map, string charset) {httpclient httpclient = null; Httppost httppost = null; String result = null; try {httpclient = new sslclient (); httppost = new httppost (url); // Установить список параметров <namevaluePair> list = new ArrayList <mankvaluepair> (); Iterator iterator = map.entryset (). Iterator (); while (iterator.hasnext ()) {intpirt <string, string> elem = (entry <string, string>) iterator.next (); list.add (new basicnamevaluepair (elem.getkey (), elem.getvalue ())); } if (list.size ()> 0) {urlencodedformentity entity = new urlencodedformentity (list, charset); httppost.setentity (сущность); } Httpresponse response = httpclient.execute (httppost); if (redentity! = null) {httpentity rederty = response.getentity (); if (redentity! = null) {result = entityutils.tostring (redentity, charset); }}}} catch (Exception ex) {ex.printStackTrace (); } return Result; }}3. Позвоните в тестовый код для запроса почты
пакет com.pcmall.service.sale.miaomore.impl; импортировать java.util.hashmap; импортировать java.util.map; // Проверка интерфейса public class testmain {private String url = "https://xxx.xxx.xxx/"; частная строка charset = "utf-8"; Частный httpclientutil httpclientutil = null; public TestMain () {httpclientutil = new httpclientutil (); } public void test () {string httporgcreateTest = url + "xxx/xxx/доставка"; Map <string, string> createmap = new hashmap <string, string> (); createmap.put ("delivery_code", "1d1qz222z22sm21a"); CreateMap.Put («TimeStamp», «1479198840000»); CreateMap.put ("Sign", "F2109C333F3ADE929F932E89703FA0F683D43EB"); String httporgcreateTestrtn = httpclientutil.dopost (httporgcreatetest, createmap, charset); System.out.println ("Результат:"+httporgcreateTestestn); } public static void main (string [] args) {testmain main = new TestMain (); main.test (); }}Сначала я не понимал использования BasicnamevaluePair. Позже я медленно исследовал его и обнаружил, что BasicnamevaluePair-это класс, который хранит пары ключей. При добавлении новых значений ключей и значений он автоматически заменит его в формате http, = и & символы, например, как https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2axtamp=1479198440000&sign=f209c33feade99f93e8970fa0f68d3eb. Нам не нужно размириться и сочетать это сами. Я лично думаю, что это довольно удобно и точное использование. Надеюсь, это может помочь всем!
Выше приведено все содержание экземпляра Java Post запроса (HTTPS), принесенного вам редактором. Я надеюсь, что все будут поддерживать wulin.com ~