uno.
1. Escriba una clase de herramienta httprequestUtils, incluida la solicitud de publicación y obtenga la solicitud
paquete com.brainlong.framework.util.httpclient; importar net.sf.json.jsonObject; import org.apache.commons.httpclient.httpstatus; import og.apache.http.httpesponse; import.apache.http.client.methods.httpget; import org.apache.http.client.methods.httttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpeget; org.apache.http.entity.StringEntity; importar org.apache.http.impl.client.defaUsthttpClient; importar org.apache.http.util.entityUtils; import og.slf4j.logger; import og.slf4j.loggerfactory; import java.io.ioException; import java.net.urldecoder; clase pública httprequestUtils {private static logger logger = loggerFactory.getLogger (httprequestUtils.class); // log/** * httppost * @param URL ruta * @param JSONPARAM Parámetro * @return */public static jsonObject httppost (string url, jsonObject jsonparam) {return httPpost (url, jsonparam, falso); } /*** Solicitud de publicación* @Param URL URL Dirección* @param JSONPARAM Parámetros* @param NoneResponse No es necesario devolver el resultado* @return* /public static jsonObject httpPost (string url, jsonObject jsonparam, boolean no -edResponse) {// solicitud de post devoluciones de resultado DefaulthttpClient (); JsonObject jsonResult = null; Httppost método = nuevo httppost (url); Pruebe {if (null! = jsonParam) {// Resuelve el problema de problemas de confusión chino entidad = new StringEntity (jsonparam.ToString (), "utf-8"); entity.setContentEncoding ("UTF-8"); entity.setContentType ("Aplicación/JSON"); método.setEntity (entidad); } HttpResponse result = httpclient.execute (método); url = urlDecoder.Decode (url, "UTF-8"); / ** La solicitud se envió correctamente y recibió una respuesta **/ if (result.getStatUsline (). GetStatUscode () == 200) {String str = ""; Pruebe { / ** Lea los datos de cadena JSON devueltos por el servidor ** / str = entityUtils.ToString (result.getEntity ()); if (NoneEdResponse) {return null; } / ** Convertir la cadena JSON al objeto JSON ** / JSONRESULT = JSONOBJECT.FROMObject (str); } Catch (Exception e) {logger.error ("Fallado de envío de solicitudes de solicitud:" + url, e); }}} Catch (ioException e) {logger.error ("Post Solicitud de envío fallido:" + url, e); } return jsonResult; } /*** Enviar solicitud* @param URL ruta* @return* /public static jsonObject httpget (url de cadena) {// get solicitud devuelve el resultado jsonObject jsonResult = null; Pruebe {DeFaulThttpClient Client = new DeFaUnthttpClient (); // Enviar solicitud HTTPGet solicitud = new httpget (url); HttpResponse respuesta = client.execute (solicitud); / ** La solicitud se envió correctamente y recibió una respuesta **/ if (respuesta.getStatUsline (). GetStatUscode () == httpstatus.sc_ok) {/ ** lea los datos de cadena JSON devueltos por el servidor **/ String strresult = entityUtils.ToString (respuesta.getEntity ()); / ** Convertir la cadena JSON a objeto json **/ jsonResult = jsonObject.FromObject (strResult); url = urlDecoder.Decode (url, "UTF-8"); } else {logger.error ("Get Solicitud de envío fallido:" + url); }} Catch (IOException e) {logger.error ("Obtener la solicitud de envío fallida:" + url, e); } return jsonResult; }}2. Escriba el código de negocio para enviar la solicitud HTTP
3. Directorio de escaneo del controlador del archivo de archivo de configuración MVC
<
4. Reciba la solicitud HTTP
Recibir solicitud de publicación
@Controlador@requestmapping (value = "/api/plataforma/excepción de excepción/excepcióninfo") publicClassexceptionInfocontroller {// inyect @aUtowiredPrivateExceptionInfobizexceptionInfobiz;/*** Crear solicitud de información de excepción*@ParamRequest Solicitar Mensaje Contenido de mensaje*@P AramRequest Mensaje encabezado*@returnjsonObject*/@requestmapping (valor = "/create", método = requestMethod.post) publicModelandViewCreateExceptionInfo (@requestBodyStringRequestBody, httpservletRequestRequest) {jsonObjectJsonObject ct = jsonObject.FromObject (requestBody); ComeXceptionInfocomExceptionInfo = newComeCeSceptionInfo (); ComexceptionInfo.SetProjectName (JSONObject. getString ("ProjectName")); ComexceptionInfo.settagname (jsonObject.getString ("ProjectName")); ComeXceptionInfo.settagname (jsonObject.getstrStr ing ("tagName")); excepcionInfobiz.insert (ComeXceptionInfo); // devuelve el resultado de la solicitud jsonObJectResult = newJsonObject (); resultado.put.put ("éxito", "true"); returnNewModelandView ("", ResponseUtilshelper.jsonsuccess (result.tosting ()));}}}}}}}}}}}}}}Recibir Solicitud Get Solicitud
@Controlador@requestmapping (value = "/api/plataforma/messageCenter/mensajes/sms") publicClassSmSController {@aUtoWiredsmssendBizsmssSendBiz;/*** Recibir el número de teléfono móvil y el contenido e insertar un registro en el registro de SMS*@paramRequestbody Solicitar mensaje Contenido*@ParamRequest Mensaje encabezado*@returnjsonObject*/@requestmapping (value = "/send", método = requestmethod.get) publicModeLelandViewSendSms (@requestBodyStringRequestBody, httpservletRequestRequest) {// Obtenga los parámetros transmitidos después de la solicitud URL y URL y URL StringUrl = request.getRequestUrl ()+"?"+Request.getQueryString (); url = buildRequestUrl.DecodeUrl (url); stringtelephone = requestuTils.getStringValue (solicitud " e "); stringContent = requestuTils.getStringValue (solicitud," contenido "); smssendbiz.inserttttmsqu (teléfono, contenido); returnNewModelandView (" ", ResponseUtilshelper.jsonResult (" ", verdadero));}}dos.
conseguir
importJava.io.bufferedReader; importjava.io.ioexception; importJava.io.inputstream; importJava.io.inputstreamreader; importador.apache.commons.httpclient.httpclient; importar; org.apache.commons.httpclient.httpmethod; importadorg.apache.commons.httpclient.methods.getmethod; publicclassh_client_get {publicstaticvoidmain (string [] showsioexce tion {// nuevo objeto de clase httpClientClient = newHttpClient (); // Use el método GET para interactuar con el servidor URL // httpmethodmethod = newgetMethod ("http://192.168.111.128/bak/regist.php? d = 1234567 & re_password = 1234567 & username = admin & nickname = admin "); httpmethodmethod = newgetMethod (" http://192.168.111.128/bak/login.php?userName= "); .executemethod (método); // stream de datos salida // método.getResponseBodyAssTream Cree un objeto de flujo de byte como InputStreamInputStreamInputStream = Method.getResponseBodyAssTream (); // InputStreamReader (InputStream AM) El flujo de byte se convierte en un flujo de carácter de carácter en un objeto de transmisión de caracteres con un objeto de flujo de caracteres con amortiguado. BufferedReaderBr = newBufferEderReader (newInputStreamReader (inputStream, "UTF-8")); // StringBuffer es una variable de cadena, y su objeto se puede expandir y modificarse para crear un objeto de clase StringBuf de vacío fer StringBufferStringBuffer = NewsTringBuffer (); // Define String Constant StringStr = ""; // Asignando una String Stream a Str String -Str no es igual a la salida vacía While ((Str = Br.Readline ())! = Null) El objeto se puede aumentar y modificarse para asignar datos STR a StringBufferStringBuffer.Append (Str);} // Salida StringBufferSystem.out.println (StringBuffer.ToString ()); // Cerrar el método HttpClient Conexión Method.eleaseConnection ();}}correo
importJava.io.bufferedReader; importJava.io.ioException; importJava.io.inputStream; importJava.io.inputStreamReader; importador.apache.commons.httpclient.methods.postmethod; importadorg.apache.commons.httpclient.*; blicstaticvoidmain (string [] args) throwsioException {httpClientClient = newHttpClient (); postmethodmethod = newPostMethod ("http://192.168.111.128/BAK/LOGIN_POST.PHP"); key = valueNeValuePair [] date = {newNameValuePair ("username", "admin"), newNameValuePair ("contraseña", "123457")}; // El método usa el método de umbral de umbral de forma de formulario. InputStreamInputStream = Method.getResponseBodyAssTream (); BufferEDReaderBr = newBufferedRead er (newInputStreamReader (inputStream, "UTF-8")); StringBufferStringBuffer = NewStringBuffer (); StringStr = ""; while ((str = br.readline ())! = NULL) {StringBuffer.Append (Str);} System.out.Println (stringBuffer.TOSTING ()); Method.ReleaseConnection ();}}tres.
No necesito decir más sobre la importancia del protocolo HTTP. En comparación con la contracción de URL que viene con JDK tradicional, HTTPClient aumenta la facilidad de uso y la flexibilidad (la diferencia específica se discutirá más adelante). No solo facilita que el cliente envíe solicitudes HTTP, sino que también facilita la interfaz de prueba del desarrollador (basada en el protocolo HTTP), lo que mejora la eficiencia del desarrollo y también facilita la robustez del código. Por lo tanto, es muy importante y obligatorio dominar httpclient. Después de dominar httpclient, creo que mi comprensión del protocolo HTTP será más profundo.
1. Introducción
HTTPClient es un subyectador en Apache Jakarta Common para proporcionar kits de herramientas de programación de clientes eficientes, más recientes y ricos en funciones que admiten el protocolo HTTP, y admite las últimas versiones y sugerencias del protocolo HTTP. HTTPClient se ha utilizado en muchos proyectos, como otros dos proyectos de código abierto conocidos en Apache Jakarta, Cactus y HTMLUnit, ambos usan httpclient.
2. Características
1. Lenguaje Java puro basado en estándares. Implementado http1.0 y http1.1
2. Todos los métodos HTTP (obtener, publicar, poner, eliminar, cabeza, opciones y trazar) se implementan en una estructura extensible orientada a objetos.
3. Soporte del protocolo HTTPS.
4. Establecer una conexión transparente a través del proxy HTTP.
5. Use el método de conexión para establecer una conexión HTTPS al túnel a través del proxy HTTP.
6. BASIC, DIGEST, NTLMV1, NTLMV2, Sesión NTLM2, esquema de certificación SNPNEGO/KERBEROS.
7. Solución de autenticación personalizada de complemento.
8. La fábrica de socket portátil y confiable facilita el uso de soluciones de terceros.
9. Conexy Manager admite aplicaciones de múltiples subprocesos. Admite establecer el número máximo de conexiones, y también admite establecer el número máximo de conexiones por host, descubrir y cerrar conexiones caducadas.
10. Maneje automáticamente las cookies en los cocineros.
11. Política de cookies personalizada de complemento.
12. El flujo de salida de la solicitud puede evitar que el contenido de la secuencia se amortigua directamente al servidor Socket.
13. El flujo de entrada de respuesta puede leer efectivamente el contenido correspondiente directamente desde el servidor Socket.
14. Mantenga conexiones persistentes con Keepalive en HTTP1.0 y HTTP1.1.
15. Obtenga directamente el código de respuesta y los encabezados enviados por el servidor.
16. Establezca la capacidad de cronometrar la conexión.
17. Soporte experimental para el almacenamiento en caché de respuesta HTTP1.1.
18. El código fuente está disponible de forma gratuita según la licencia Apache.
3. Cómo usar
Es muy simple usar httpclient para enviar solicitudes y recibir respuestas, y generalmente requiere los siguientes pasos.
1. Cree un objeto HttpClient.
2. Cree una instancia del método de solicitud y especifique la URL de solicitud. Si necesita enviar una solicitud GET, cree un objeto httpget; Si necesita enviar una solicitud de publicación, cree un objeto httppost.
3. Si necesita enviar parámetros de solicitud, puede llamar al método setParams (parámetros hetparams) común a httpget y httppost para agregar los parámetros de solicitud; Para los objetos httpost, también puede llamar al método SetEntity (entidad httpentity) para establecer los parámetros de solicitud.
4. Llame a la ejecución (solicitud httpurirequest) del objeto httpclient para enviar una solicitud, y este método devuelve un httpResponse.
5. Llamar a GetAllHeaders (), Getheaders (nombre de cadena) y otros métodos pueden obtener el encabezado de respuesta del servidor; Llamar al método getEntity () de httpResponse puede obtener el objeto HttpEntity, que envuelve el contenido de respuesta del servidor. El programa puede obtener el contenido de respuesta del servidor a través de este objeto.
6. Libere la conexión. La conexión debe liberarse independientemente de si el método de ejecución es exitoso o no.
IV. Ejemplos
paquete com.test; import java.io.file; import java.io.fileInputStream; import java.io.ioException; import java.io.unsupportedencodingException; import java.security.KeyManagementException; import java.security.keystore; import java.security.keystoreException; import java.security.nosuchalgorithmexception; import java.security.cert.certificateException; import java.util.arrayList; import java.util.list; import javax.net.ssl.sslcontext; 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.sslconnectionsockyFactory; importar org.apache.http.conn.ssl.sslcontexts; importar org.apache.http.conn.ssl.trustselfsignedStrategy; 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.ccloseablehttpclient; 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; clase pública httpClientTest {@test public void Junittest () {get (); } / ** * HttpClient Connection ssl * / public void ssl () {cerrableHttpClient httpClient = null; Pruebe {KeyStore TrustStore = KeyStore.getInstance (KeyStore.getDefaultType ()); FileInputStream Insteam = new FileInputStream (nuevo archivo ("d: //tomcat.keystore")); Pruebe {54. // Cargue el almacén de claves D: //tomcat.keystore TrustStore.load (INSTAÑO, "123456" .ToCarArray ()); } catch (CertateException e) {E.PrintStackTrace (); } finalmente {try {enterTream.close (); } capt (excepción ignore) {}} // Confía en su propia CA y todos los certificados autofirmados sslContext sslContext = sslContexts.custom (). LoadTrustMaterial (TrustStore, New TrustSignedStategy ()). Build (); // Solo uso del protocolo TLSV1 SSLConnectionsocketFactory sslsf = new sslConnectionsocketFactory (SSLContext, new String [] {"TLSV1"}, NULL, SSLConnectionsocketLockFactory.Browser_Compatible_HostName_verifier); httpclient = httpclients.custom (). setsslsocketfactory (sslsf) .build (); // Crear solicitud http (método get) httpget httpget = new httpget ("https: // localhost: 8443/mydemo/ajax/serivcej.action"); System.out.println ("Ejecución de solicitud" + httpget.getRequestline ()); Respuesta ClosableHttPResponse = httppclient.execute (httpget); intente {httpentity entity = respuesta.getEntity (); System.out.println ("----------------------------------------"); System.out.println (respuesta.getStatUsline ()); if (entity! = null) {System.out.println ("Longitud de contenido de respuesta:" + entity.getContentLength ()); System.out.println (entityUtils.tostring (entidad)); EntityUtils.consume (entidad); }} 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) {try {httpclient.close (); } catch (ioException e) {E.PrintStackTrace (); }}}}} / ** * Envíe el formulario en POST (Simular la solicitud de inicio de sesión del usuario) * / public void postform () {// Cree la instancia de httpclient predeterminada. Cerrablehttpclient httpclient = httpclients.createDefault (); // Crear httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Crear lista de colas de parámetros <NameValuePair> forParams = new ArrayList <nameValuePair> (); formparams.Add (new BasicNameValuePair ("Nombre de usuario", "Admin")); FormParams.Add (new BasicNameValuePair ("contraseña", "123456")); Urlencoded Formentity Ufentity; Pruebe {UfEntity = New UrlencodedFormentity (FormParams, "UTF-8"); httppost.setEntity (UfEntity); System.out.println ("Ejecución de solicitud" + httppost.geturi ()); Respuesta ClosableHttPResponse = httpClient.Execute (httppost); intente {httpentity entity = respuesta.getEntity (); if (entity! = null) {system.out.println ("--------------------------------------"); System.out.println ("Contenido de respuesta:" + EntityUtil.ToString (entidad, "UTF-8")); System.out.println ("--------------------------------------"); }} finalmente {Response.Close (); }} Catch (ClientProtocolException e) {E.PrintStackTrace (); } Catch (UnsupportedEncodingException e1) {e1.printstacktrace (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {// cierre la conexión y suelte el recurso intente {httpClient.close (); } catch (ioException e) {E.PrintStackTrace (); }}} / *** Envíe una solicitud de publicación para acceder a la aplicación local y devolver diferentes resultados de acuerdo con los parámetros aprobados* / public void post () {// Cree la instancia predeterminada de httpclient. Cerrablehttpclient httppclient = httpclients.createDefault (); // Crear httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Crear lista de colas de parámetros <NameValuePair> forParams = new ArrayList <nameValuePair> (); forparams.add (nuevo BasicNameValuePair ("Tipo", "Casa")); Urlencoded Formentity Ufentity; Pruebe {UfEntity = New UrlencodedFormentity (forparams, "UTF-8"); httppost.setEntity (UfEntity); System.out.println ("Ejecución de solicitud" + httppost.geturi ()); Respuesta ClosableHttPResponse = httpClient.Execute (httppost); intente {httpentity entity = respuesta.getEntity (); if (entity! = null) {system.out.println ("--------------------------------------"); System.out.println ("Contenido de respuesta:" + EntityUtil.ToString (entidad, "UTF-8")); System.out.println ("--------------------------------------"); }} finalmente {Response.Close (); }} Catch (ClientProtocolException e) {E.PrintStackTrace (); } Catch (UnsupportedEncodingException e1) {e1.printstacktrace (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {// cierre la conexión y suelte el recurso intente {httpClient.close (); } catch (ioException e) {E.PrintStackTrace (); }}} / *** Enviar una solicitud GET* / public void get () {cerrableHttpClient httpClient = httpclients.createDefault (); Prueba {// Crea httpget. Httpget httpget = new httpget ("http://www.baidu.com/"); System.out.println ("Ejecución de solicitud" + httpget.geturi ()); // Ejecutar la solicitud GET. Respuesta ClosableHttPResponse = httpClient.Execute (httpget); Pruebe {// Obtenga la entidad de respuesta httpentity entity = respuesta.getEntity (); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Print response Longitud de contenido System.out.println ("Respuesta Longitud de contenido:" + Entity.getContentLength ()); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- } catch (ioException e) {E.PrintStackTrace (); } Finalmente {// cierre la conexión y suelte el recurso intente {httpClient.close (); } catch (ioException e) {E.PrintStackTrace (); }}} / *** cargue el archivo* / public void upload () {cerrableHttpClient httpClient = httpclients.createDefault (); Pruebe {httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivceFile.action"); FileBody bin = new FileBody (nuevo archivo ("f: //image//sendpix0.jpg")); StringBody Comment = new StringBody ("Un archivo binario de algún tipo", contentype.text_lain); Httpentity reqentity = multipartentityBuilder.create (). AddPart ("bin", bin) .AddPart ("comentario", comentario) .Build (); httppost.setEntity (reqentity); System.out.println ("Ejecución de solicitud" + httppost.getRequestline ()); Respuesta ClosableHttPResponse = httpClient.Execute (httppost); intente {System.out.println ("----------------------------------------"); System.out.println (respuesta.getStatUsline ()); Httpentity resentity = respuesta.getEntity (); if (resentity! = null) {System.out.println ("Longitud de contenido de respuesta:" + Resentity.getContentLength ()); } EntityUtils.consume (resentidad); } Finalmente {Response.Close (); }} Catch (ClientProtocolException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } finalmente {try {httpClient.close (); } catch (ioException e) {E.PrintStackTrace (); }}}}}} </nameValuePair> </nameValuePair> </nameValuePair>El ejemplo simple anterior del proceso de envío de solicitudes HTTPClient y los resultados de la solicitud de recepción en Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.