один.
1. Напишите класс инструментов httprequestutils, включая запрос POST и GET запрос
пакет com.brainlong.framework.util.httpclient; Импорт 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.httpget; import org.apache.http. org.apache.http.entity.stringentity; import org.apache.http.impl.client.defaulthttpclient; импорт org.apache.http.util.entityutils; import org.slf4j.logger; импорт org.slf4j.loggerfactory; Импорт java.io.ioexception; импорт java.net.urldecoder; открытый класс httprequestutils {private Static Logger logger = loggerFactory.getLogger (httprequestutils.class); // log/** * httppost * @param url path * @param jsonparam parameter * @return */public static jsonobject httppost (string url, jsonobject jsonparam) {return httppost (url, jsonparam, false); } /*** Post запрос* @param URL URL -адрес* @param jsonparam parameters* @param noneedresponse не нужно возвращать результат* @return* /public static jsonobject httppost (строка url, jsonobject jsonparam, boolean needresponse) {// post requients reculedafaulthttpclient ht Defaulthttpclient (); JsonObject jsonResult = null; Httppost method = new httppost (url); попробуйте {if (null! = jsonparam) {// Решить китайскую искаженную задачу stry vitity = new строгость (jsonparam.tostring (), "utf-8"); Entity.SetContentEncoding ("UTF-8"); Entity.SetContentType ("Application/Json"); Method.Setentity (Entity); } Httpresponse result = httpclient.execute (method); url = urldecoder.decode (url, "utf-8"); / ** Запрос был успешно отправлен и получил ответ **/ if (result.getStatusline (). GetStatuscode () == 200) {string str = ""; try { / ** Читать данные json String, возвращаемые сервером ** / str = entityutils.tostring (result.getentity ()); if (noneedresponse) {return null; } / ** преобразовать json string в json object ** / jsonresult = jsonObject.fromObject (str); } catch (Exception e) {logger.error ("Производство отправки запроса после:" + url, e); }}} catch (ioException e) {logger.error ("Не удалось отправить запрос:" + url, e); } return jsonResult; } /*** Отправить get запрос* @param path* @return* /public static jsonobject httpget (string url) {// get request return result jsonobject jsonresult = null; try {defaulthttpclient client = new Defaulthttpclient (); // Отправить GET запрос httpget request = new httpget (url); Httpresponse response = client.execute (request); / ** Запрос был успешно отправлен и получил ответ **/ if (response.getStatusline (). GetStatuscode () == httpstatus.sc_ok) {/ ** Прочтите строковые данные json, возвращаемые сервером **/ String strresult = entityutils.tostring (ouss.getentity ()); / ** преобразовать json string в json object **/ jsonresult = jsonObject.fromObject (strResult); url = urldecoder.decode (url, "utf-8"); } else {logger.error ("GET запрос. Отказ от отправки:" + url); }} catch (ioException e) {logger.error ("get запрос. } return jsonResult; }}2. Напишите бизнес -код для отправки HTTP -запроса
3. Каталог контроллера настройки конфигурации MVC Configuration
<!-Автоматическое сканирование и только сканирование @controller-> <Контекст: компонент-сканирование base-package = "com.wiselong.multichannel" use-default-filters = "false"> <context: include-filter type = "annotation" Expression = "org.springframework.steretype.controler" /> < /context: component-scan>
4. Получить HTTP -запрос
Получить запрос сообщения
@Controller@requestMapping (value = "/api/platform/exceptionCenter/exceptionInfo") publicCsexceptionInfoController {// inject @AutowireDPrivateExceptionInfobizexceptionInfobiz;/*** Создание Информация об исключении. Header*@returnJsonObject*/@requestMapping (value = "/create", method = requestMethod.post) publicModelandViewCreateExceptionInfo (@requestBodyStringRequestoby, httpServletRequestRequest) {jsonObjectJsonObject ct = jsonObject.fromObject (requestBody); comexceptionInfocomexceptionInfo = newComeXceptionInfo (); comexceptionInfo.setProjectName (jsonObject. getString ("projectName")); comexceptionInfo.setTagName (jsonObject.getString ("projectName")); comexceptionInfo.setTagname (jsonObject.getStr ING ("TAGNAME")); ExceptionInfobiz.insert (keyXceptionInfo); // Возврат результата запроса jsonobjectresult = newjsonobject (); result.put ("успех", "true"); returnnewmodelandView ("", responceTilShelper.jsonsuccess (result.toString ());Получить запрос получить
@Controller@requestMapping (value = "/api/platform/messagecenter/messages/sms") publicclasssmscontroller {@autowiredsmssendbizssdendbiz;/*** Получить номер мобильного телефона и содержимое и вставьте запись в SMS Send Table*@ParamrequestBode Content*@ParamRequest Запрос Сообщение запроса запроса запроса запроса ParamreQuest Header*@returnJsonObject*/@requestMapping (value = "/send", method = requestMethod.get) publicModelandViewSendsms (@requestBodyStringRequestbody, httpservletrequestrequest) {// Получить параметры, передаваемые после запроса и url StringUrl = request.getRequesturl ()+"?"+Request.getQueryString (); url = buildRequesturl.decodeurl (url); stringTelephone = requestUtils.getStringValue (запрос, "телефон e "); stringContent = requestUtils.getStringValue (request," content "); smssendbiz.insertttmsqu (телефон, контент); returnnewmodelandview (" ", responseUtilShelper.jsonResult (" ", true));}}два.
получать
ImportJava.io.bufferedReader; importJava.io.ioException; importJava.io.inputStream; importJava.io.inputStreamReader; impormorg.apache.commons.httpclient.httpclient; import org.apache.commons.httpclient.httpmethod; impormorg.apache.commons.httpclient.methods.getmethod; publicclassh_client_get {publicstaticvoidmain (string [] args) throwsioexcep tion {// новый объект класса httpclientclient = newhttpclient (); // Использовать метод получения для взаимодействия с URL Server // 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 (method); // Выход потока данных // method.getResponseBodyAssTream Создать объект BYTE -потока в качестве inputStreamInptReamInputStream = method.getResponseBodyAssTream (); // inputStreamReader (входной сериал AM). Поток байта преобразуется в буферист в потоке символов в объекте в стиле символов. BufferedReaderBR = newBufferedReader (NewInputStreamReader (InputStream, "UTF-8")); // StringBuffer - это строковая переменная, и ее объект может быть расширен и модифицирован для создания пустой StringBuf Class Class ObjectBufferStringBuffer = newstringBuffer (); // Определение строки постоянной stringstr = ""; // Присвоение потока строки str String Constant Str STR не равна пустому выходу, когда ((str = br.Readline ())! Объект может быть дополнен и изменен для назначения данных STR на stringBufferStringBuffer.Append (str);} // Выходные stringBuffersystem.out.println (stringbuffer.toString ()); // Закрыть метод подключения httpClient.sreleAseConnect ();}}почта
ImportJava.io.bufferedReader; importJava.io.ioException; importJava.io.inputStream; importJava.io.inputStreamReader; impormorg.apache.commons.httpclient.methods.postmethod; impormorg.apache.commons.httpclient.*; blicstaticvoidmain (string [] args) throwsioexception {httpclientclient = newhttpclient (); postmethodmethod = newpostmethod ("http://192.168.111.128/bak/login_post.php"); key = valuenamevaluepair [] date = {newnamevaluepair ("username", "admin"), newnamevaluepair ("пароль", "123457")}; // Метод использует метод формы. 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.tostring (); Method.ReleAseConnection ();}}три.
Мне не нужно больше говорить о важности протокола HTTP. По сравнению с UrlConnection, которая поставляется с традиционным JDK, HTTPClient увеличивает простоту использования и гибкость (конкретное различие будет обсуждаться позже). Это не только облегчает для клиента отправлять HTTP -запросы, но также облегчает тестовый интерфейс разработчика (на основе протокола HTTP), что повышает эффективность разработки, а также облегчает надежность кода. Следовательно, очень важно и обязательно освоить HttpClient. После освоения httpclient я считаю, что мое понимание протокола HTTP будет более глубоким.
1. Введение
HttpClient-это субпроект при Apache Jakarta Common для обеспечения эффективных, новейших, богатых функциями инструментов для клиента, которые поддерживают протокол HTTP, и поддерживает последние версии и предложения протокола HTTP. HTTPClient использовался во многих проектах, таких как два других известных проектов с открытым исходным кодом на Apache Jakarta, Cactus и Htmlunit, оба используют httpclient.
2. Характеристики
1. Стандартный, чистый язык Java. Реализованный http1.0 и http1.1
2. Все методы HTTP (Get, Post, Pult, Delete, Head, Options и Trace) реализованы в расширяемой объектно-ориентированной структуре.
3. Поддержка протокола HTTPS.
4. Установите прозрачное соединение через HTTP -прокси.
5. Используйте метод Connect, чтобы установить HTTPS -соединение с туннелем через HTTP -прокси.
6. Basic, Digest, NTLMV1, NTLMV2, NTLM2 SESSION, Схема сертификации SNPNEGO/KERBEROS.
7. Плагин пользовательский решение аутентификации.
8. Портативная и надежная фабрика сокетов облегчает использование сторонних решений.
9. Connection Manager поддерживает многопоточные приложения. Он поддерживает настройку максимального количества подключений, а также поддерживает установку максимального количества соединений на хост, обнаруживая и закрытие соединений с истекшим сроком действия.
10. Автоматически обрабатывать файлы cookie в сетях.
11. Плагин пользовательский политика cookie.
12. Выходной поток запроса может предотвратить содержимое потока непосредственно на сервер сокета.
13. Входной поток ответа может эффективно считывать соответствующий контент непосредственно с сервера сокета.
14. Сохраняйте постоянные связи с KeepAlive в HTTP1.0 и HTTP1.1.
15. напрямую получить код ответа и заголовки, отправленные сервером.
16. Установите способность, чтобы снять подключение.
17. Экспериментальная поддержка для кэширования ответа HTTP1.1.
18. Исходный код доступен бесплатно на основе лицензии Apache.
3. Как использовать
Очень просто использовать httpclient для отправки запросов и получения ответов, и, как правило, требуется следующие шаги.
1. Создайте объект HTTPClient.
2. Создайте экземпляр метода запроса и укажите URL -адрес запроса. Если вам нужно отправить запрос GET, создайте объект httpget; Если вам нужно отправить запрос на сообщение, создайте объект HTTPPOST.
3. Если вам нужно отправить параметры запроса, вы можете вызвать метод SetParams (Hetpparams Params), общий для Httpget и Httppost, чтобы добавить параметры запроса; Для объектов httppost вы также можете вызвать метод Setentity (httpentity), чтобы установить параметры запроса.
4. Позвоните в выполнение (запрос httpurirequest) объекта httpclient, чтобы отправить запрос, и этот метод возвращает httpresponse.
5. Вызов httpresponse getallheaders (), Getheaders (String name) и другие методы могут получить заголовок ответа сервера; Вызов метода httpresponse getEntity () может получить объект httpentity, который завершает содержимое ответа сервера. Программа может получить содержимое ответа сервера через этот объект.
6. Отпустите соединение. Соединение должно быть выпущено независимо от того, успешно ли метод выполнения или нет.
IV Примеры
пакет com.test; Импорт java.io.file; импортировать java.io.fileinputstream; импортировать java.io.ioexception; импортировать java.io.unsupportedencodingexception; Импорт java.security.KeyManagementException; Импорт java.security.keystore; Импорт java.security.keyStoreException; Импорт java.security.nosuchalgorithmexception; Импорт java.security.cert.certificateException; импортировать java.util.arraylist; импортировать java.util.list; импортировать javax.net.ssl.sslcontext; Импорт org.apache.http.httpentity; Импорт org.apache.http.namevaluepair; Импорт org.apache.http.parseexception; Импорт org.apache.http.client.clientprotocolexception; Импорт org.apache.http.client.entity.urlencodedFormentity; Импорт org.apache.http.client.methods.closablehttpresponse; Импорт org.apache.http.client.methods.httpget; Импорт org.apache.http.client.methods.httppost; Import org.apache.http.conn.ssl.sslconnectionsockectectory; Импорт org.apache.http.conn.ssl.sslcontexts; Импорт org.apache.http.conn.ssl.trustselfsignedStrategy; Импорт org.apache.http.entity.contenttype; Импорт org.apache.http.entity.mime.multipartentityBuilder; Import org.apache.http.entity.mime.content.filebody; Импорт org.apache.http.entity.mime.content.stringbody; Import org.apache.http.impl.client.closablehttpclient; импорт org.apache.http.impl.client.httpclients; импорт org.apache.http.impl.client.httpclients; Импорт org.apache.http.message.basicnamevaluepair; Импорт org.apache.http.util.entityutils; Импорт org.junit.test; открытый класс httpclienttest {@test public void junittest () {get (); } / ** * httpclient connection ssl * / public void ssl () {stockablehttpclient httpclient = null; try {keystore trustStore = keystore.getInstance (keystore.getDefaultType ()); FileInputStream inStream = new FileInputStream (new File ("d: //tomcat.keystore")); try {54. // Загрузить магазин ключа d: //tomcat.keystore TrustStore.load (instream, "123456" .tchararray ()); } catch (setmateException e) {e.printstacktrace (); } наконец {try {enterstream.close (); } catch (исключение игнорировать) {}} // Доверие своему собственному CA и всем самоопределенным сертификатам sslcontext sslcontext = sslcontexts.custom (). // только использование TLSV1 Protocol SslConnectionsockeCoteCfactory sslsf = new sslConnectionsockeCtectory (sslContext, new String [] {"tlsv1"}, null, sslConnectionsoctectectectectory.browser_compatible_hostname_verifier); httpclient = httpclients.custom (). setsslsocketfactory (sslsf) .build (); // Создание http -запроса (метод получить метод) httpget httpget = new httpget ("https: // localhost: 8443/mydemo/ajax/serivcej.action"); System.out.println («выполнение запроса» + httpget.getRequestline ()); ClosableHttpresponse response = httppclient.execute (httpget); try {httpentity entity = response.getentity (); System.out.println ("-----------------------------------------"); System.out.println (response.getStatusline ()); if (Entity! = null) {System.out.println ("Длина содержимого ответа:" + entity.getContentLength ()); System.out.println (EntityUtils.toString (Entity)); Entityutils.consume (Entity); }} наконец {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 (); } наконец {if (httpclient! = null) {try {httpclient.close (); } catch (ioException e) {e.printstackTrace (); }}}}} / ** * Отправить форму в post (симулировать запрос входа в систему пользователя) * / public void postform () {// Создание экземпляра httpclient по умолчанию. ClosableHttpClient httpclient = httpclients.createdefault (); // Создать httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Создание списка очередей параметров <namevaluePair> forParams = new ArrayList <mankvaluePair> (); formparams.add (new Basicnamevaluepair («Имя пользователя», «Админ»)); formparams.add (new BasicnamevaluePair («пароль», "123456")); Urlencodedformentity Uefentity; try {uefentity = new urlencodedformentity (formparams, "UTF-8"); httppost.setentity (uefentity); System.out.println («выполнение запроса» + httppost.geturi ()); ClosableHttpresponse response = httpclient.execute (httppost); try {httpentity entity = response.getentity (); if (Entity! = null) {System.out.println ("----------------------------------"); System.out.println ("Содержимое ответа:" + entityutils.tostring (Entity, "UTF-8")); System.out.println ("--------------------------------------"); }} наконец {response.close (); }} catch (clientProtocolexception e) {e.printstackTrace (); } catch (UnsupportEncodingException e1) {e1.printstackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {// закройте соединение и выпустите ресурс try {httpclient.close (); } catch (ioException e) {e.printstackTrace (); }}} / *** Отправить запрос POST для доступа к локальному приложению и возврата различных результатов в соответствии с передаваемыми параметрами* / public void post () {// Создать экземпляр HTTPClient по умолчанию. ClosableHttpClient httppclient = httpclients.createdefault (); // Создать httppost httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcej.action"); // Создание списка очередей параметров <namevaluePair> forParams = new ArrayList <mankvaluePair> (); forparams.add (new Basicnamevaluepair («Тип», «Дом»)); Urlencodedformentity Uefentity; try {uefentity = new urlencodedformentity (forparams, "UTF-8"); httppost.setentity (uefentity); System.out.println («выполнение запроса» + httppost.geturi ()); ClosableHttpresponse response = httpclient.execute (httppost); try {httpentity entity = response.getentity (); if (Entity! = null) {System.out.println ("----------------------------------"); System.out.println ("Содержимое ответа:" + entityutils.tostring (Entity, "UTF-8")); System.out.println ("--------------------------------------"); }} наконец {response.close (); }} catch (clientProtocolexception e) {e.printstackTrace (); } catch (UnsupportEncodingException e1) {e1.printstackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {// закройте соединение и выпустите ресурс try {httpclient.close (); } catch (ioException e) {e.printstackTrace (); }}} / *** Отправить запрос GET* / public void get () {stockableHttpClient httpClient = httpclients.createDefault (); Попробуйте {// Создать httpget. Httpget httpget = new httpget ("http://www.baidu.com/"); System.out.println («выполнение запроса» + httpget.geturi ()); // выполнить запрос GET. ClosableHttpresponse response = httpclient.execute (httpget); try {// Получить ответ intity httpentity entity = response.getentity (); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Print response Содержание System.out.println ("Длина ответа:" + entity.getContentlength ()); System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- } catch (ioException e) {e.printstackTrace (); } наконец {// закройте соединение и выпустите ресурс try {httpclient.close (); } catch (ioException e) {e.printstackTrace (); }}} / *** Загрузить файл* / public void upload () {useablehttpclient httpclient = httpclients.createdefault (); try {httppost httppost = new httppost ("http: // localhost: 8080/mydemo/ajax/serivcefile.action"); Filebody bin = new Filebody (новый файл ("f: //image//sendpix0.jpg")); Stringbody comment = new Stringbody ("какой -то двоичный файл", contentType.text_plain); Httpentity reqentity = multipentitybuilder.create (). Addpart ("bin", bin) .addpart ("Комментарий", комментарий) .build (); httppost.setentity (requentity); System.out.println («выполнение запроса» + httppost.getRequestline ()); ClosableHttpresponse response = httpclient.execute (httppost); try {System.out.println ("--------------------------------------------"); System.out.println (response.getStatusline ()); Httpentity reventity = response.getentity (); if (redentity! = null) {System.out.println ("Длина содержимого ответа:" + vederity.getContentLength ()); } EntityUtils.consume (Возникание); } наконец {response.close (); }} catch (clientProtocolexception e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {try {httpclient.close (); } catch (ioException e) {e.printstackTrace (); }}}}}} </namevaluepair> </namevaluepair> </namevaluepair>Приведенный выше простой пример процесса отправки запросов HTTPClient и получения результатов запроса в Java - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.