Recentemente, preciso fazer um invólucro na interface do cliente e depois usar outras chamadas do sistema da minha empresa. A interface do cliente é implementada usando um URL HTTP. Quero usar o pacote httpclient para fazer solicitações. Ao mesmo tempo, como o URL solicitado é HTTPS, a fim de evitar a necessidade de um certificado, uso uma classe para herdar a classe DefaulthttpClient e ignorar o processo de verificação.
1. Escreva uma classe sclcient e herde -a para httpclient
pacote com.pcmall.service.sale.miaomore.impl; importar java.security.cert.certificateException; importar java.security.cert.x509Certificate; importar javax.net.ssl.ssslContext; importar javax.net.ssl.trustmanager; importar javax.net.ssl.x509TrustManager; importar org.apache.http.conn.clientConnectionManager; importar org.apache.http.conn.scheme.scheme; importar org.apache.http.conn.scheme.schemeregistry; importar org.apache.http.conn.ssl.sssocktFactory; importar org.apache.http.impl.client.defaulthttpClient; // httpclient para fazer solicitações https public classe sslclient estende a defaultTttpClient {public sslclient () lança a exceção {super (); SslContext ctx = sslContext.getInstance ("tls"); X509TrustManager tm = new X509TrustManager () {@Override public void CheckClientTrusted (Chain de X509Certificate [], String Authtype) lança certificadoException {} @Override public void checkServerTrusted (x509Certificate [] Chain, string Authtype) X509Certificate [] getAcceptEdissuers () {return null; }}; ctx.init (null, new TrustManager [] {tm}, null); SSLSocketFactory SSF = new SSLSocketFactory (ctx, sslsocketFactory.allow_all_hostname_verifier); ClientConnectionManager ccm = this.getConnectionManager (); Schemeregistry sr = ccm.getschemeregistry (); Sr.Recister (novo esquema ("https", 443, SSF)); }}2. Escreva uma classe que usa httpclient para enviar solicitações de postagem
pacote com.pcmall.service.sale.miaomore.impl; importar java.util.arraylist; importar java.util.iterator; importar java.util.list; importar java.util.map; importar java.util.map.entry; importar org.apache.http.httpentity; importar org.apache.http.httpResponse; importar org.apache.http.nameValuepair; importar org.apache.http.client.httpclient; importar org.apache.http.client.entity.urlencodedFormentity; importar org.apache.http.client.methods.httppost; importar org.apache.http.message.basicnameValuepair; importar org.apache.http.util.entityutils; /** Classe de ferramenta para solicitações de postagem usando httpclient*/ public class HttpClientUtil {public String DoPost (String url, map <string, string> map, string charset) {httpclient httpclient = null; HttpPost httppost = null; Resultado da string = null; tente {httpClient = new sslClient (); httppost = novo httppost (url); // Defina a lista de parâmetros <NameValuepair> list = new ArrayList <NameValuepair> (); Iterator iterator = map.entrySet (). Iterator (); while (iterator.hasNext ()) {entradas <string, string> elem = (entrada <string, string>) iterator.next (); list.add (new BasicNameValuepair (elem.getKey (), elem.getValue ())); } if (list.size ()> 0) {urlencodedformentity entity = novo urlencodedformentity (list, charset); httppost.setentity (entidade); } HttpResponse resposta = httpclient.execute (httppost); if (ressentity! = null) {httpentity ressentity = Response.getEntity (); if (ressentidade! = null) {resultado = entityutils.toString (ressentidade, charset); }}}} catch (Exceção ex) {ex.PrintStackTrace (); } resultado de retorno; }}3. Ligue para o código de teste para solicitação de postagem
pacote com.pcmall.service.sale.miaomore.impl; importar java.util.hashmap; importar java.util.map; // Teste a interface public class Testmain {private String url = "https://xxx.xxx.xxx/"; private string charset = "utf-8"; private httpClientUTIL HTTPCLIENTUTIL = NULL; public testMain () {httpClientUtil = new HttpClientUtil (); } public void test () {string httporgcreateTest = url + "xxx/xxx/entrega"; Mapa <string, string> createMap = new hashmap <string, string> (); createMap.put ("Delivery_code", "1d1qz222z22sm21a"); createMap.put ("Timestamp", "1479198840000"); createMap.put ("Sign", "F2109C333F3EADE929F932E89703FA0F683D43EB"); String httporgcreateTestrtn = httpclientUtil.doPost (httporgCreateTest, createMap, charset); System.out.println ("Resultado:"+httporgcreateTetSttn); } public static void main (string [] args) {testMain main = new testMain (); main.test (); }}No começo, eu não entendi o uso do BasicNameValuepair. Mais tarde, eu o explorei lentamente e descobri que o BasicNameValuepair é uma classe que armazena pares de valor-chave. Ao adicionar novos valores de chave e valor, ele substituirá automaticamente -o pelo formato http, = e símbolos, como https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=dqzzsm2apamp=1479198840000&sign=f209c33feade993e8970fa0f68d3eb. Não precisamos unir e combinar por nós mesmos. Pessoalmente, acho que é bastante conveniente e preciso usar. Espero que possa ajudar a todos!
O exposto acima é o conteúdo inteiro da instância do Java Post Request (HTTPS) trazida a você pelo editor. Espero que todos apoiem wulin.com ~