um.
1. Escreva uma classe de ferramentas HttPrequestutils, incluindo solicitação de postagem e solicita a solicitação
pacote com.brainlong.framework.util.httpclient; import net.sf.json.JSONObject;import org.apache.commons.httpclient.HttpStatus;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.stringentity; importar org.apache.http.impl.client.defaulthttpclient; importar org.apache.http.util.entityutils; importar java.io.ioException; importar java.net.urldecoder; classe pública HttPrequestutils {private estático logger logger = LoggerFactory.getLogger (httprequestutils.class); // log/** * httppost * @param url caminho * @param jsonparam parâmetro * @return */public static jsonObject httppost (string url, jsonObject jsonparam) {return httppost (url, jsonparam, false); } /** * post request* @param url url address* @param jsonParam Parameters* @param noNeedResponse No need to return result* @return */ public static JSONObject httpPost(String url,JSONObject jsonParam, boolean noNeedResponse){ //post request returns resultDefaultHttpClient httpClient = new DefaultThttpClient (); JsonObject jsonResult = null; Método httppost = novo httppost (url); tente {if (null! = jsonparam) {// Resolva o problema chinês Glebled Problem stringentity entity = new stringentity (jsonparam.toString (), "utf-8"); entity.setContentEncoding ("UTF-8"); entity.setContentType ("Application/json"); Method.Setrity (entidade); } HttpResponse resultado = httpclient.execute (método); url = urldecoder.decode (url, "utf-8"); / ** A solicitação foi enviada com sucesso e recebeu uma resposta **/ if (resultado.getStatusline (). GetStatuscode () == 200) {string str = ""; tente { / ** Leia os dados da string json retornada pelo servidor ** / str = entityutils.toString (resultado.getEntity ()); if (nãoedResponse) {return null; } / ** Converta a string json em objeto json ** / jsonResult = jsonObject.FromObject (str); } Catch (Exceção e) {Logger.error ("Post Solicitação de envio falhou:" + url, e); }}} catch (ioexception e) {Logger.error ("O envio da solicitação de postagem falhou:" + url, e); } retornar jsonResult; } /*** Enviar solicitação GET* @param url caminho* @return* /public static jsonObject httpget (string url) {// get solicitação retorna o resultado jsonObject jsonResult = null; tente {defaulthttpClient client = new DefaultTHTtpClient (); // Enviar solicitação GET HTTPGET solicita = new HttpGet (URL); HTTPRESPOnsion Response = client.execute (request); / ** A solicitação foi enviada com sucesso e recebeu uma resposta **/ if (Response.getStatusline (). GetStatuscode () == httpstatus.sc_ok) {/ ** Leia os dados da string json retornada pelo servidor **/ strresult = entityutils.tostring (resposta.getentity (); / ** Converta a string json em objeto json **/ jsonResult = jsonObject.FromObject (strRresult); url = urldecoder.decode (url, "utf-8"); } else {Logger.error ("Obter o envio da solicitação falhou:" + url); }} catch (ioexception e) {Logger.error ("Obter o envio da solicitação falhou:" + url, e); } retornar jsonResult; }}2. Escreva o código comercial para enviar solicitação HTTP
3. Diretório de digitalização do controlador de configurações de configuração do MVC
<!-varredura automática e apenas digitalize @Controller-> <Contexto: Componente-Scan-Base-Package = "com.wiselong.multichannel" use-default-filters = "false"> <contexto: incluir-filter type = "annotation" Expression = "org.springworkwork.steretypey.Controller" /
4. Receba solicitação HTTP
Receber solicitação de postagem
@Controlador@requestmapping (value = "/api/plataforma/excepcionCenter/excepcioninInfo") publicCllassexceptionInfocontroller {// injetar @autowiredprivateExceptionInfobizexceptionInfobiz;/*** Crie informações de informação de exceção*@paramquestbody solicitar conteúdo*@p arame -sequest Cabeçalho*@returnjsonObject*/@requestMapp (value = "/create", método = requestmethod.post) publicModElandViewCreateExceptionInfo (@requestBodystringRequestbody, httpServletRequestReQuest) {JsonObjsonObjson ct = jsonObject.FromObject (requestbody); comexceptionInfocomexceptionInfo = newcomexceptionInfo (); comexceptionInfo.setProjectName (jsonObject. getString ("ProjectName")); ComexceptionInfo.setTagName (jsonObject.getString ("ProjectName")); ComexceptionInfo.setTagName (jsonObject.getStr ing ("tagname")); excepcioninfobiz.insert (comxceptionInfo); // retorna o resultado da solicitação JsonObjectSult = newjsonObject (); resultado.put ("succcess", "true"); ReturnNewMoDelandView ("" Responshelper.jSonsUccess (resultado.ToSTring ()) ("), Responshelper.JSonsUccess (resultado.ToString ());Receber solicitação Get
@Controlador@requestmapping (value = "/api/plataforma/messagecenter/messages/sms") publicClassSMSCOntroller {@AUTOWIEDSSSSSENDBIZSSSSSENDBIZ;/*** Receba número de telefone celular e conteúdo e insira um registro na tabela de envio sms*@paramquestbody message content*@conteúdo* Cabeçalho*@returnjsonObject*/@requestMapp (value = "/send", método = requestMethod.get) publicModElandViendSendsms (@requestBodystringRequestbody, httpServleTrequestRequest) {// obtém os parâmetros transmitidos após a solicitação url e url Stringurl = request.getRequesturl ()+"?"+Request.getQueryString (); url = buildRequesturl.decodeurl (url); stringtelephone = requestUtils.getStringValue (solicitação ", telefon e "); stringContent = requestUtils.getStringValue (request," content "); smSsendbiz.insertttmsququ (telefone, conteúdo); returnNewModelandView (" ", ResponstilShelper.jsonResult (", true);}}}}}}}}}}}}dois.
pegar
importjava.io.bufferedReader; importJava.io.ioException; importJava.io.inputStream; importjava.io.inputStreamReader; importância.apache.commons.httpclient.httpclient; org.apache.commons.httpclient.httpmethod; importância.apache.commons.httpclient.methods.getmethod; publicClassh_client_get {publicstaticVoidMain (string [] args) throwsioExcence {// nova classe Object httpClientClient = newHttpClient (); // Use o método GET para interagir com o URL Server // httpmethodmethod = newgetMethod ("http://192.168.11.128/bak/regist.phphphp?ailg. d = 1234567 & re_password = 1234567 & nome de usuário = admin & apelido = admin "); httpmethodmethod = newgetMethod (" http://192.168.111.128/Bak/Login. .Executemethod (Method); // Saída de fluxo de dados // Method.GetResponseBodyAsstream Crie um objeto de fluxo de bytes como InputStreamInputStreamInputStream = Method.GetResponseBodyAssTream (); // InputStreamReader (InputStream AM) O BYTE é convertido em um fluxo de fluxo de caracteres. BufferReaderbr = newBufferedReader (newInputStreamReader (InputStream, "UTF-8")); // StringBuffer é uma variável de string e seu objeto pode ser expandido e modificado para criar uma classe StringBuf vazio FER Object StringBufferStringBuffer = NewsTringBuffer (); // Definir string constante stringsTr = ""; // atribuir uma string a string string não é igual a saída vazia (str = "; Seu objeto pode ser aumentado e modificado para atribuir dados de STR a StringBufferStringBuffer.append (str);} // output stringbuffersystem.out.println (stringbuffer.toString ()); // fechar o método httpclient conexão.publicar
importjava.io.bufferedReader; importJava.io.ioException; importJava.io.inputStream; importjava.io.inputStreamReader; importância.apache.commons.httpclient.methods.Postmethod; importância blicstaticVoidMain (string [] args) lWRowsioException {httpClientClient = newHttpClient (); pós -metodMethod = newPostMethod ("http://192.168.111.128/bak/login_post.php"); key = valuenameValuepair [] date = {newNameValuepair ("nome de usuário", "admin"), newNameValuepair ("senha", "123457")}; // método usa o limite de formulário. InputStreamInputStream = Method.GetResponseBodyAssTream (); BufferEredReaderBr = newBufferedRead er (newInputStreamReader (inputStream, "utf-8")); stringbufferstringbuffer = newstringbuffer (); stringstr = ""; while ((str = b.readline ())! Method.ReleasEConnection ();}}três.
Não preciso dizer mais sobre a importância do protocolo HTTP. Comparado com a URLConnection que vem com o JDK tradicional, o HTTPClient aumenta a facilidade de uso e a flexibilidade (a diferença específica será discutida posteriormente). Isso não apenas facilita o envio do cliente HTTP, mas também facilita a interface de teste do desenvolvedor (com base no protocolo HTTP), o que melhora a eficiência do desenvolvimento e também facilita a robustez do código. Portanto, é muito importante e obrigatório dominar httpclient. Depois de dominar o httpclient, acredito que minha compreensão do protocolo HTTP será mais aprofundada.
1. Introdução
O HTTPClient é um sub-projeto no Apache Jacarta Common para fornecer kits de ferramentas de programação de clientes eficientes e ricos em recursos que suportam o protocolo HTTP e suporta as versões e sugestões mais recentes do protocolo HTTP. O HTTPClient tem sido usado em muitos projetos, como outros dois projetos de código aberto bem conhecido no Apache Jacarta, Cactus e Htmlunit, ambos usam httpclient.
2. Características
1. Língua Java Pure baseada em padrão. Implementado http1.0 e http1.1
2. Todos os métodos HTTP (GET, POST, POT, DELETE, CABEÇA, OPTIONS E ERTRAGEM) são implementados em uma estrutura extensível orientada a objetos.
3. Suporte Protocolo HTTPS.
4. Estabeleça uma conexão transparente através do proxy HTTP.
5. Use o método de conexão para estabelecer uma conexão HTTPS com o túnel através do proxy HTTP.
6. BASIC, DIGEST, NTLMV1, NTLMV2, SESSÃO NTLM2, Esquema de certificação SNPNEGO/KERBEROS.
7. Solução de autenticação personalizada plug-in.
8. A fábrica de soquete portátil e confiável facilita o uso de soluções de terceiros.
9. O Gerenciador de conexões suporta aplicativos com vários threads. Ele suporta definir o número máximo de conexões e também suporta definir o número máximo de conexões por host, descobrir e fechar conexões expiradas.
10. Lidar automaticamente com os cookies em cookies.
11. Política de cookies personalizada do plugin.
12. O fluxo de saída da solicitação pode impedir que o conteúdo do fluxo seja buffer diretamente no servidor de soquete.
13. O fluxo de resposta de entrada pode efetivamente ler o conteúdo correspondente diretamente do servidor de soquete.
14. Mantenha as conexões persistentes com o Keepalive em http1.0 e http1.1.
15. Obtenha diretamente o código de resposta e os cabeçalhos enviados pelo servidor.
16. Defina a capacidade de diminuir a conexão.
17. Suporte experimental para cache de resposta HTTP1.1.
18. O código -fonte está disponível gratuitamente com base na licença Apache.
3. Como usar
É muito simples usar o HTTPClient para enviar solicitações e receber respostas e geralmente requer as etapas a seguir.
1. Crie um objeto httpclient.
2. Crie uma instância do método de solicitação e especifique o URL da solicitação. Se você precisar enviar uma solicitação GET, crie um objeto httpget; Se você precisar enviar uma solicitação de postagem, crie um objeto HTTPPOST.
3. Se você precisar enviar parâmetros de solicitação, poderá chamar o método SetParams (parâmetros Hetpparams) comum ao httpget e httppost para adicionar os parâmetros de solicitação; Para objetos HTTPPOST, você também pode chamar o método Setentity (entidade httpentity) para definir os parâmetros de solicitação.
4. Ligue para a execução (solicitação httpurirequest) do objeto httpclient para enviar uma solicitação, e esse método retorna uma resposta httpre.
5. Chamando o getallheaders (), getheaders (nome da string) e outros métodos podem obter o cabeçalho de resposta do servidor; Chamar o método Getentity () do HTTPPRESPONSE pode obter o objeto HttPentity, que envolve o conteúdo de resposta do servidor. O programa pode obter o conteúdo de resposta do servidor através deste objeto.
6. libere a conexão. A conexão deve ser liberada independentemente de o método de execução ser bem -sucedido ou não.
4. Exemplos
pacote com.test; importar java.io.file; importar java.io.fileInputStream; importar java.io.ioException; importar java.io.unsupportEnCodingException; importar java.security.keyManagementException; importar java.security.keystore; importar java.security.keystoreException; importar java.security.nosuchalgorithMexception; importar java.security.cert.certificateException; importar java.util.arraylist; importar java.util.list; importar javax.net.ssl.ssslContext; importar org.apache.http.httpentity; importar org.apache.http.nameValuepair; importar org.apache.http.parseException; importar org.apache.http.client.clientprotocolexception; importar org.apache.http.client.entity.urlencodedFormentity; importar org.apache.http.client.methods.closeablehttpResponse; importar org.apache.http.client.methods.httpget; importar org.apache.http.client.methods.httppost; importar org.apache.http.conn.ssl.ssslConnectionSocketFactory; importar org.apache.http.conn.ssl.ssslContexts; importar org.apache.http.conn.sssl.trustes -selfSignedStrategy; importar org.apache.http.entity.contentType; importar org.apache.http.entity.mime.multipartentitybuilder; importar org.apache.http.entity.mime.content.filebody; importar org.apache.http.entity.mime.content.stringbody; importar org.apache.http.impl.client.closeablehttpclient; importar org.apache.http.impl.client.httpclients; importar org.apache.http.impl.client.httpclients; importar org.apache.http.message.basicnameValuepair; importar org.apache.http.util.entityutils; importar org.junit.test; classe pública httpclienttest {@test public void junittest () {get (); } / ** * conexão httpclient ssl * / public void ssl () {encerrávelHttpClient httpClient = null; tente {keystore truststore = keystore.getInstance (keystore.getDefaultType ()); FileInputStream Instruam = new FileInputStream (novo File ("d: //tomcat.keystore")); tente {54. // Carregar KeyStore d: //tomcat.keystore truststore.load (Instruam, "123456" .toCharArray ()); } catch (certificadoException e) {e.printStackTrace (); } finalmente {try {EnterStream.close (); } catch (exceção ignorar) {}} // Confie em sua própria CA e todos os certificados autoassinados sslContext sslContext = sslContexts.custom (). loadTrustMaterial (TrustStore, novo trustSeilsengedstrategStrategs). // Uso somente do protocolo TLSV1 SSLConnectionSocketFactory SSLSF = new SSLConnectionSocketFactory (SSLContext, new String [] {"TLSV1"}, null, sslConnectionSocketFactory.browser_compatible_hostname_verifier); httpClient = httpclients.custom (). SetSslSocketFactory (sslsf) .build (); // crie solicitação http (método get) httpget httpget = new httpget ("https: // localhost: 8443/mydemo/ajax/Serivcej.action"); System.out.println ("Execução da solicitação" + httpget.getRequestLine ()); ClosableHttpResponse Response = httppclient.execute (httpget); tente {httpentity entity = resposta.getEntity (); System.out.println ("--------------------------------------"); System.out.println (Respons.getStatusline ()); if (entidade! = null) {System.out.println ("Resposta Conteúdo Comprimento:" + entity.getContentLength ()); System.out.println (entityutils.toString (entidade)); Entityutils.consume (entidade); }} finalmente {Response.close (); }} catch (parseException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } catch (keymanagementException e) {e.printStackTrace (); } catch (nosuchalgorithMexception e) {e.printStackTrace (); } catch (keystoreException e) {e.printStackTrace (); } finalmente {if (httpClient! = null) {tente {httpclient.close (); } catch (ioexception e) {e.printStackTrace (); }}}}} / ** * Envie o formulário no post (simular a solicitação de login do usuário) * / public void postform () {// Crie a instância padrão httpclient. ClosableHttpClient httpClient = httpClients.createFault (); // Crie httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Criar lista de filas de parâmetros <NameValuepair> forparams = new ArrayList <NameValuepair> (); FormParams.add (new BasicNameValuepair ("Nome de usuário", "Admin")); FormParams.add (new BasicNameValuepair ("Senha", "123456")); Urlencodedformentity Uefentity; tente {ueFentity = nova URLEncodedFormentity (FormParams, "UTF-8"); httppost.setentity (uefentity); System.out.println ("Execução da solicitação" + httppost.geturi ()); ClosableHttpResponse Response = httpclient.execute (httppost); tente {httpentity entity = resposta.getEntity (); if (entidade! = null) {System.out.println ("------------------------------------"); System.out.println ("Conteúdo da resposta:" + entityutils.toString (entidade, "utf-8")); System.out.println ("------------------------------------"); }} finalmente {Response.close (); }} catch (clientprotocolexception e) {e.printStackTrace (); } Catch (UnsupportEdEncodingException e1) {e1.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {// feche a conexão e libere o recurso Try {httpclient.close (); } catch (ioexception e) {e.printStackTrace (); }}} / *** Envie uma solicitação de postagem para acessar o aplicativo local e retornar resultados diferentes de acordo com os parâmetros passados* / public void post () {// Crie a instância HTTPClient padrão. ClosableHttpClient httppClient = httpClients.createFault (); // Crie httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Criar lista de filas de parâmetros <NameValuepair> forparams = new ArrayList <NameValuepair> (); forparams.add (new BasicNameValuepair ("Type", "House")); Urlencodedformentity Uefentity; tente {uefentity = nova URLEncodedFormentity (forparams, "utf-8"); httppost.setentity (uefentity); System.out.println ("Execução da solicitação" + httppost.geturi ()); ClosableHttpResponse Response = httpclient.execute (httppost); tente {httpentity entity = resposta.getEntity (); if (entidade! = null) {System.out.println ("------------------------------------"); System.out.println ("Conteúdo da resposta:" + entityutils.toString (entidade, "utf-8")); System.out.println ("------------------------------------"); }} finalmente {Response.close (); }} catch (clientprotocolexception e) {e.printStackTrace (); } Catch (UnsupportEdEncodingException e1) {e1.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {// feche a conexão e libere o recurso Try {httpclient.close (); } catch (ioexception e) {e.printStackTrace (); }}} / *** Envie uma solicitação GET* / public void get () {CloseableHttpClient httpClient = httpclients.createFault (); tente {// crie httpget. Httpget httpget = new httpget ("http://www.baidu.com/"); System.out.println ("Execução da solicitação" + httpget.geturi ()); // execute a solicitação GET. ClosableHttpResponse Response = httpclient.execute (httpget); tente {// obtenha a entidade de resposta httpentity entity = resposta.getEntity (); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Print response Comprimento do conteúdo System.out.println ("Comprimento do conteúdo da resposta:" + entity.getContentLength ()); System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- } catch (ioexception e) {e.printStackTrace (); } finalmente {// feche a conexão e libere o recurso Try {httpclient.close (); } catch (ioexception e) {e.printStackTrace (); }}} / *** Carregue o arquivo* / public void upload () {ClosableHttpClient httpClient = httpclients.createFault (); tente {httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcefile.action"); FileBody bin = new FileBody (novo arquivo ("f: //image//sendpix0.jpg")); Stringbody Comment = new Stringbody ("Um arquivo binário de algum tipo", contentType.text_plain); Httpentity reqentity = multipartentitybuilder.create (). AddPart ("bin", bin) .addpart ("comentário", comentário) .build (); httppost.setentity (reqentity); System.out.println ("Execução da solicitação" + httppost.getRequestLine ()); ClosableHttpResponse Response = httpclient.execute (httppost); tente {System.out.println ("----------------------------------------"); System.out.println (Respons.getStatusline ()); HttPentity Ressentity = Response.getEntity (); if (ressentidade! = null) {System.out.println ("Comprimento do conteúdo da resposta:" + ressentity.getContentLength ()); } Entityutils.consume (ressentidade); } finalmente {Response.Close (); }} catch (clientprotocolexception e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {tente {httpclient.close (); } catch (ioexception e) {e.printStackTrace (); }}}}}} </nameValuepair> </nameValuepair> </namevaluepair>O exemplo simples acima do processo de envio de solicitações HTTPClient e os resultados da solicitação de recebimento em Java é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.