un.
1. Écrivez une classe d'outils httprequestutils, y compris la demande de poste et obtenez une demande
package com.brainlong.framework.util.httpclient; importation net.sf.json.jsonObject; import org.apache.commons.httpclient.httpstatus; import org.apache.http.httpresponse; import org.apache.http.client.methods.httpost; org.apache.http.entity.stringentity; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.util.entityutils; import org.slf4j.logger; import org.slf4j.loggerfactory; Importer java.io.ioException; import java.net.urldecoder; classe publique httprequestUtils {private static logger logger = loggerfactory.getLogger (httprequestUtils.class); // log / ** * httppost * @param URL Path * @param jsonparam paramètre * @return * / public static jsonObject httppost (URL de chaîne, jsonObject JSonParam) {return httppost (url, jsonparam, false); } / ** * Demande post * @param adresse URL URL * @param jsonparam Paramètres * @param nonedResponse pas besoin de retourner le résultat * @return * / public static jsonObject httppos DefaulthTTPClient (); JSONObject JSONRESULT = NULL; HTTPPOST Method = new HTTPPOST (URL); essayez {if (null! = JSonParam) {// Résoudre le problème chinois Bringlet Entity Entity = new StronEntity (jsonparam.toString (), "utf-8"); entity.setConTentencoding ("UTF-8"); entity.setContentType ("application / json"); Method.SetEntity (entité); } HttpResponse result = httpclient.execute (méthode); url = urlDECODER.DECODE (URL, "UTF-8"); / ** La demande a été envoyée avec succès et a reçu une réponse ** / if (result.getStatusline (). GetStaturScode () == 200) {String str = ""; essayez {/ ** Lisez les données de chaîne JSON renvoyées par le serveur ** / str = entityUtils.ToString (result.getEntity ()); if (nonedResponse) {return null; } / ** Convertir la chaîne JSON en objet JSON ** / JSONRESULT = JSONObject.FromObject (Str); } catch (exception e) {logger.error ("La soumission de la demande de poste a échoué:" + url, e); }}} catch (ioException e) {Logger.Error ("La soumission de la demande de post a échoué:" + url, e); } return jsonResult; } / ** * Envoyer une demande de get * @param chemin d'url * @return * / public static jsonObject httpget (URL de chaîne) {// get request returns result JSonObject JSonResult = null; essayez {defaulthTTPClient client = new DefaulthTTPClient (); // Envoyer une demande de request httpget = new httpget (url); HttpResponse Response = Client.Execute (demande); / ** La demande a été envoyée avec succès et a reçu une réponse ** / if (Response.getStatusline (). GetStaturcode () == httpstatus.sc_ok) {/ ** Lisez les données de chaîne JSON renvoyées par le serveur ** / string strresult = entityUtils.tostring (réponse.getEntity ()); / ** Convertir la chaîne JSON en objet JSON ** / JSONRESULT = JSONObject.FromObject (strresult); url = urlDECODER.DECODE (URL, "UTF-8"); } else {Logger.Error ("Get Demande La soumission a échoué:" + URL); }} catch (ioException e) {Logger.Error ("GET DEMANDE La soumission a échoué:" + url, e); } return jsonResult; }}2. Écrivez le code commercial pour envoyer une demande HTTP
3. Répertoire de numérisation des paramètres du fichier de configuration MVC
<! - Scan automatique et unique scan @Controller -> <context: composant-scan Base-Package = "com.wiselong.multichannel" use-default-filers = "false"> <
4. Recevoir la demande HTTP
Recevoir une demande de poste
@ Contrôleur @ requestmapping (value = "/ api / plateforme / exceptionCenter / exceptionInfo") publicClassexceptionInfoController {// inject @autowiredprivateExceptionInfobizexceptionInfobiz; / *** Créer des informations d'exception demande En-tête * @ returnjsonObject * / @ requestmapping (value = "/ création", méthode = requestMethod.post) publicModelandViewCreateExceptionInfo (@ requestBodystringRequestBod ct = jsonObject.FromObject (requestBody); comexceptionInfomexceptionInfo = newcomeXceptionInfo (); comexceptionInfo.setProjectName (jsonObject. getString ("projectName")); comexceptionInfo.setTagName (jsonObject.getString ("projectName")); comexceptionInfo.setTagName (jsonObject.getstr ing ("tagname")); exceptionInfobiz.insert (comexceptionInfo); // renvoie le résultat de la demande jsonObjectResult = newjsonObject (); result.put ("Success", "true"); returnNewModelandView ("", réponse}}}Recevoir Get Demande
@ Contrôleur @ requestmapping (value = "/ api / plateforme / MessageCenter / messages / sms") publicClassSmsController {@AutowiredSmsSendBizSssSendBiz; / *** Recevoir le numéro de téléphone mobile et le contenu et insérer un enregistrement dans le SMS Envoyer Table * @ paramrequestbody Demande de demande Contenu * @ paramrequest Demande Message En-tête * @ returnjsonObject * / @ requestMapping (value = "/ send", méthode = requestMethod.get) publicModelandViewSendsm StringUrl = request.getRequestUrl () + "?" + Request.getQueyString (); url = buildRequestUrl.decodeurl (url); stringtelephone = requestUtils.getStringValue (request, "Telephon e "); stringContent = requestUtils.getStringValue (request," contenu "); smsssendbiz.insertttmsququ (téléphone, contenu); returnNewModelandView (" ", réponse utilshelper.jsonresult (" ", true));}}deux.
obtenir
importjava.io.bufferedReader; importjava.io.ioException; importjava.io.inputStream; importjava.io.inputstreamreader; importorg.apache.commons.httpclient.httpclient; import org.apache.commons.httpclient.httpmethod; importorg.apache.commons.httpclient.methods.getMethod; publicClassh_Client_get {publicStatingVoidMain (String [] args) throwsioExcep tion {// nouvel objet de classe httpclientclient = newhttpclient (); // Utilisez la méthode GET pour interagir avec le serveur URL // httpMethodMethod = newGetMethod ("http://192.168.111.128/bak/[email protected]&passworwor d = 1234567 & re_password = 1234567 & username = admin & wnowname = admin "); httpMethodMethod = newGetMethod (" http://192.168.111.128/bak/login.php?Username= "); // Utiliser la méthode GET pour implémenter la connexion client pour le serveur URL .ExECUTEMETHOD (Method); // Data Stream Output // Method.GetResponseBodyAsstream Créer un objet Stream Byte comme InputStreamInputStreamInputStream = Method.GetResponseBodyAssstream (); // InputStreamReader (InputStream AM) Le flux de byte est converti en buffeur de flux de caractères. BufferedReaderBr = newBuffereDReader (NewInputStreamReader (InputStream, "UTF-8")); // StringBuffer est une variable de chaîne, et son objet peut être étendu et modifié pour créer un objet StringBuf Fer vide StringBufferstringBuffer = NewStringBuffer (); // Définir String constant stringStr = ""; // Affectation un Stream Stream à Str String constant STR n'est pas égal à la sortie vide while ((str = br.readline)))! = Null) être augmenté et modifié pour affecter les données STR à StringBufferstringBuffer.APPEND (STR);} // output StringBuffersystem.out.println (StringBuffer.ToString ()); // Fermez la méthode httpclient méthode.releaseconnection ();}}poste
importjava.io.bufferedReader; importjava.io.ioexception; importjava.io.inputStream; importjava.io.inputstreamreader; importorg.apache.commons.httpclient.methods.posthod; importorg.apache.commons.httclient. *; BlicStaticVoidMain (String [] args) throwSioException {httpClientClient = newhttpclient (); postMethodMethod = newPostMethod ("http://192.168.111.128/bak/login_post.php"); // la valeur du champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ de formulaire, à la fois le champ Form key = valuenameValuepair [] date = {newnameValuepair ("username", "admin"), newnameValuepair ("mot de passe", "123457")}; // Méthode utilise la méthode de seuil de formulaire. InputStreAmInputStream = Method.getResponseBodyAssstream (); BuffereDReaderBr = NewBufferedRead er (newInputStreamReader (inputStream, "utf-8")); stringBufferStringBuffer = NewStringBuffer (); stringstr = ""; while ((str = br.readline ())! = null) {StringBuffer.APPEND (Str);} System.out.println (StringBuffer.Tostring ();); méthode.releaseconnection ();}}trois.
Je n'ai pas besoin d'en dire plus sur l'importance du protocole HTTP. Par rapport à l'URLConnection qui vient avec JDK traditionnel, HttpClient augmente la facilité d'utilisation et la flexibilité (la différence spécifique sera discutée plus loin). Il est non seulement plus facile pour le client d'envoyer des demandes HTTP, mais facilite également l'interface de test du développeur (basé sur le protocole HTTP), qui améliore l'efficacité de développement et facilite également la robustesse du code. Par conséquent, il est très important et obligatoire de maîtriser HttpClient. Après avoir maîtrisé HttpClient, je crois que ma compréhension du protocole HTTP sera plus approfondie.
1. Introduction
HTTPClient est un sous-projet sous Apache Jakarta commun pour fournir des boîtes à outils de programmation client efficaces et riches en fonctionnalités qui prennent en charge le protocole HTTP, et il prend en charge les dernières versions et suggestions du protocole HTTP. HTTPClient a été utilisé dans de nombreux projets, tels que deux autres projets open source bien connus sur Apache Jakarta, Cactus et HTMLUnit, tous deux utilisent HttpClient.
2. Caractéristiques
1. Langue Java pure basée sur standard. Implémenté http1.0 et http1.1
2. Toutes les méthodes HTTP (obtenir, publier, mettre, supprimer, tête, options et trace) sont implémentées dans une structure orientée objet extensible.
3. Protocole HTTPS Soutenir.
4. Établir une connexion transparente via le proxy HTTP.
5. Utilisez la méthode Connect pour établir une connexion HTTPS au tunnel via le proxy HTTP.
6. Basic, Digest, NTLMV1, NTLMV2, SÉSSION NTLM2, Schéma de certification SNPNEGO / KERBEROS.
7. Solution d'authentification personnalisée plug-in.
8. L'usine de socket portable et fiable facilite l'utilisation de solutions tierces.
9. Connexion Manager prend en charge les applications multi-thread. Il prend en charge la définition du nombre maximum de connexions et prend également en charge la définition du nombre maximum de connexions par hôte, la découverte et la fermeture des connexions expirées.
10. Gérer automatiquement les cookies dans les cookies set.
11. Politique de cookie personnalisée du plugin.
12. Le flux de sortie de la demande peut empêcher le contenu du flux d'être mis en mémoire tampon vers le serveur de socket.
13. Le flux d'entrée de réponse peut lire efficacement le contenu correspondant directement à partir du serveur de socket.
14. Gardez les connexions persistantes avec Keepalive dans HTTP1.0 et HTTP1.1.
15. Obtenez directement le code de réponse et les en-têtes envoyés par le serveur.
16. Définissez la possibilité de chasser la connexion.
17. Support expérimental pour la mise en cache de réponse HTTP1.1.
18. Le code source est disponible gratuitement en fonction de la licence Apache.
3. Comment utiliser
Il est très simple d'utiliser httpclient pour envoyer des demandes et recevoir des réponses, et nécessite généralement les étapes suivantes.
1. Créez un objet httpclient.
2. Créez une instance de la méthode de demande et spécifiez l'URL de demande. Si vous devez envoyer une demande GET, créez un objet HTTPGET; Si vous avez besoin d'envoyer une demande de post, créez un objet HTTPPOST.
3. Si vous avez besoin d'envoyer des paramètres de demande, vous pouvez appeler la méthode SetParams (Hetpparams Params) commune à HTTPGET et HTTPPOST pour ajouter les paramètres de demande; Pour les objets HTTPPOST, vous pouvez également appeler la méthode Setentity (Httpentity Entity) pour définir les paramètres de demande.
4. Appelez l'exécution (demande httpurirequest) de l'objet httpclient pour envoyer une demande, et cette méthode renvoie une httpResponse.
5. Appeler GetAllheders () de HttpResponse, Getheaders (nom de chaîne) et d'autres méthodes peuvent obtenir l'en-tête de réponse du serveur; L'appel de la méthode GetEntity () de HTTPResponse peut obtenir l'objet httpentity, qui enveloppe le contenu de réponse du serveur. Le programme peut obtenir le contenu de réponse du serveur via cet objet.
6. Libérez la connexion. La connexion doit être libérée, que la méthode d'exécution soit réussie ou non.
Iv. Exemples
package com.test; Importer java.io.file; import java.io.fileInputStream; Importer java.io.ioException; Importer java.io.UNSUPPORTEDENCODINGException; Importer Java.Security.KeyManagementException; Importer java.security.keystore; Importer Java.Security.KeyStoreException; importer java.security.nosuchalgorithMexception; Importer java.security.cert.certificateException; import java.util.arraylist; Importer java.util.list; import javax.net.ssl.sslcontext; import org.apache.http.httpentity; import org.apache.http.NameValuePair; import org.apache.http.parseException; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.entity.urLencocedFormentity; import org.apache.http.client.methods.closeablehttpResponse; import org.apache.http.client.methods.httpget; import org.apache.http.client.methods.httppost; import org.apache.http.conn.ssl.sslconnectionsocketfactory; import org.apache.http.conn.ssl.sslContexts; import org.apache.http.conn.ssl.trustSelfsignedStrategy; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartentityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.stringbody; import org.apache.http.impl.client.closeablehttpclient; import org.apache.http.impl.client.httpclients; import org.apache.http.impl.client.httpclients; import org.apache.http.message.basicNameValuepair; import org.apache.http.util.entityutils; import org.junit.test; classe publique httpClientTest {@Test public void JunitTest () {get (); } / ** * HttpClient Connection SSL * / public void ssl () {clôturehttpclient httpClient = null; essayez {keystore TrustStore = keystore.getInstance (keystore.getDefaultType ()); FileInputStream InsideRam = new FileInputStream (nouveau fichier ("d: //tomcat.keystore")); Essayez {54. // Chargez le clés D: //tomcat.keystore TrustStore.Load (Instream, "123456" .tocharArray ()); } catch (certificateException e) {e.printStackTrace (); } enfin {try {enterStream.close (); } catch (exception ignore) {}} // Faites confiance à votre propre CA et à tous les certificats auto-signés sslcontext sslContext = sslContex.custom (). LoadTrustMaterial (TrustStore, new TrustSelfSignedStrategy ()). Build (); // Utilisation uniquement du protocole TLSV1 SSLConnectionSocketFactory SSLSF = new SSLConnectionSocketFactory (SSLContext, new String [] {"TLSV1"}, null, sslconnections bancaires; httpClient = httpClients.Custom (). SetSSLSocketFactory (sslsf) .build (); // Créer une demande http (get method) httpget httpget = new httpget ("https: // localhost: 8443 / mydemo / ajax / serivcej.action"); System.out.println ("Exécution de la demande" + httpget.getRequestline ()); CloseableHttpResponse Response = httppClient.Execute (httpget); essayez {httpentity entity = réponse.getEntity (); System.out.println ("----------------------------------------"); System.out.println (réponse.getStatusline ()); if (entité! = null) {System.out.println ("Longueur du contenu de la réponse:" + entité.getContentLength ()); System.out.println (entityUtils.tostring (entité)); EntityUtils.consume (entité); }} enfin {réponse.close (); }} catch (parseException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } catch (keymanagementxception e) {e.printStackTrace (); } catch (NosuchalgorithMexception e) {e.printStackTrace (); } catch (keyStoreException e) {e.printStackTrace (); } enfin {if (httpclient! = null) {try {httpclient.close (); } catch (ioException e) {e.printStackTrace (); }}}}} / ** * Soumettez le formulaire dans Post (simulez la demande de connexion utilisateur) * / public void postform () {// Créez l'instance httpclient par défaut. CloseableHttpClient httpClient = httpClients.CreateDefault (); // Créer httppost httppost httppost = new httppost ("http: // localhost: 8080 / mydemo / ajax / serivcej.action"); // Créer une liste de files d'attente de paramètres <NameValuepair> FORAPARAMS = new ArrayList <NameValuePair> (); Formparams.Add (new BasicNameValuePair ("nom d'utilisateur", "administrateur")); formarams.add (new BasicNameValuepair ("mot de passe", "123456")); UrlencodedFormentity UeFentity; essayez {ueFentity = new UrLencomedFormentity (FormArams, "UTF-8"); httppost.sentity (ueFentity); System.out.println ("Exécution de la demande" + httppost.geturi ()); CloseableHttpResponse Response = httpClient.Execute (httppost); essayez {httpentity entity = réponse.getEntity (); if (entité! = null) {System.out.println ("--------------------------------------"); System.out.println ("Contenu de réponse:" + EntityUtils.Tostring (Entity, "UTF-8")); System.out.println ("--------------------------------------"); }} enfin {réponse.close (); }} catch (clientProtocolexception e) {e.printStackTrace (); } catch (UnportEnCoDingException e1) {e1.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } Enfin {// Fermez la connexion et relâchez la ressource try {httpclient.close (); } catch (ioException e) {e.printStackTrace (); }}} / ** * Envoyez une demande de message pour accéder à l'application locale et renvoyez les différents résultats en fonction des paramètres passés * / public void post () {// Créez l'instance httpclient par défaut. CloseableHttpClient httppClient = httpClients.CreateDefault (); // Créer httppost httppost httppost = new httppost ("http: // localhost: 8080 / mydemo / ajax / serivcej.action"); // Créer une liste de files d'attente de paramètres <NameValuepair> FORAPARAMS = new ArrayList <NameValuePair> (); FORPARAMS.ADD (New BasicNameValuePair ("Type", "House")); UrlencodedFormentity UeFentity; essayez {ueFentity = new UrLencomedFormentity (Forparams, "UTF-8"); httppost.sentity (ueFentity); System.out.println ("Exécution de la demande" + httppost.geturi ()); CloseableHttpResponse Response = httpClient.Execute (httppost); essayez {httpentity entity = réponse.getEntity (); if (entité! = null) {System.out.println ("--------------------------------------"); System.out.println ("Contenu de réponse:" + EntityUtils.Tostring (Entity, "UTF-8")); System.out.println ("--------------------------------------"); }} enfin {réponse.close (); }} catch (clientProtocolexception e) {e.printStackTrace (); } catch (UnportEnCoDingException e1) {e1.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } Enfin {// Fermez la connexion et relâchez la ressource try {httpclient.close (); } catch (ioException e) {e.printStackTrace (); }}} / ** * Envoyer une demande GET * / public void get () {CloseableHttpClient httpClient = httpclients.createDefault (); Essayez {// Créer httpget. Httpget httpget = new httpget ("http://www.baidu.com/"); System.out.println ("Exécution de la demande" + httpget.geturi ()); // Exécuter la demande GET. CloseableHttpResponse Response = httpClient.Execute (httpget); essayez {// obtenir l'entité de réponse httpentity entity = réponse.getEntity (); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Print response Content Longueur System.out.println ("Réponse Longueur du contenu:" + entité.getContentLength ()); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- } catch (ioException e) {e.printStackTrace (); } Enfin {// Fermez la connexion et relâchez la ressource try {httpclient.close (); } catch (ioException e) {e.printStackTrace (); }}} / ** * Téléchargez le fichier * / public void upload () {CloseableHttpClient httpClient = httpclient.createDefault (); essayez {httppost httppost = new httppost ("http: // localhost: 8080 / mydemo / ajax / serivcefile.action"); Filebody bin = new FileBody (nouveau fichier ("f: //image//sendpix0.jpg")); StringBody commentaire = new StringBody ("un fichier binaire d'un type", contentType.Text_plain); Httpentity reqentity = multipartentityBuilder.create (). Addpart ("bin", bin) .addPart ("comment", comment) .build (); httppost.sentity (reqentity); System.out.println ("Exécution de la demande" + httppost.getRequestline ()); CloseableHttpResponse Response = httpClient.Execute (httppost); essayez {System.out.println ("------------------------------------" "); System.out.println (réponse.getStatusline ()); Httpentity Resentity = Response.GetEntity (); if (Resentity! = null) {System.out.println ("Longueur du contenu de la réponse:" + Ressentity.getContentLength ()); } EntityUtils.consume (Resentity); } enfin {réponse.close (); }} catch (clientProtocolexception e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } enfin {try {httpclient.close (); } catch (ioException e) {e.printStackTrace (); }}}}}} </ nameValuepair> </ nameValuepair> </ nameValuepair>L'exemple simple ci-dessus du processus d'envoi de demandes HTTPClient et de résultats de demande de demande dans Java est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.