Obtenir cas:
1. Créez un projet Maven, l'introduction de la dépendance:
< Dépendances > <! - HttpClient -> < dépendance > < groupId > org.apache.httpcomponents </ groupId > < artifactId > httpclient </ artifactId > < Version > 4.5.3 </ Version > </ dépendance > <! - 日志-> < dépendance > < groupId > org.slf4j </ groupId > <artifactId> Slf4j-log4j12 </ artifactId > < Version > 1.7.25 </ Version > </ dépendance > <! - JUnit -> < dépendance > < groupId > JUnit </ groupId > < artifactId > JUnit </ artifactId > < Version > 4,12 </ Version > </ dépendance > </ dépendances >
2. Ajouter log4j.properties
log4j.rootLogger = DEBUG, A1
log4j.logger.com.fgy = debug
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1. layout.ConversionPattern =% - d {aaaa-mm-jj hh: mm: ss, SSS} [t%] [% c] - [% p]% m% n
3. Ecrire le code de test, la capture de données
@Test publique vide testFirst () lance IOException { CloseableHttpClient client = HttpClients.createDefault (); HttpGet HttpGet = nouvelle HttpGet ( "https://www.cnblogs.com/roadlandscape/" ); Réponse CloseableHttpResponse = client.execute (HttpGet); si (response.getStatusLine () getStatusCode () == 200. ) { Chaîne de contexte = EntityUtils.toString (response.getEntity (), "utf-8" ); System.out.println (contexte); } }
GET demande avec des paramètres:
@Test publique vide testGetParam () { CloseableHttpClient client = HttpClients.createDefault (); // HttpGet HttpGet = new HttpGet ( " https://s.taobao.com/search?q=vivo "); Réponse CloseableHttpResponse = null ; essayez { UriBuilder constructeur = nouveau UriBuilder ( "https://s.taobao.com/search" ); builder.addParameter ( "q", "in vivo" ); HttpGet HttpGet = nouveau HttpGet (builder.build ()); réponse = client.execute (HttpGet); si (response.getStatusLine () getStatusCode () == 200. ) { Chaîne de contexte = EntityUtils.toString (response.getEntity (), "utf-8" ); System.out.println (contexte); } } Captures (Exception e) { e.printStackTrace (); } Enfin { si (réponse =! Null ) { try { response.close (); } Captures (IOException e) { e.printStackTrace (); } } Essayer { client.close (); } Captures (IOException e) { e.printStackTrace (); } } }
requête POST:
@Test publique vide testPost () { CloseableHttpClient client = HttpClients.createDefault (); HttpPost HttpPost = nouvelle HttpPost ( "https://www.cnblogs.com/roadlandscape/" ); Réponse CloseableHttpResponse = null ; essayez { réponse = client.execute (HttpPost); si (response.getStatusLine () getStatusCode () == 200. ) { Chaîne de contexte = EntityUtils.toString (response.getEntity (), "utf-8" ); System.out.println (contexte); } } Captures (IOException e) { e.printStackTrace (); } Enfin { si (réponse =! Null ) { try { response.close (); } Captures (IOException e) { e.printStackTrace (); } } Essayer { client.close (); } Captures (IOException e) { e.printStackTrace (); } } }
requête POST avec des paramètres:
@Test publique vide testPostParam () { CloseableHttpClient client = HttpClients.createDefault (); Réponse CloseableHttpResponse = null ; essayez { HttpPost HttpPost = nouveau HttpPost ( "https://s.taobao.com/search" ); // 创建存放参数的liste Liste <NameValuePair> params = nouveau ArrayList <> (); params.add ( nouveau BasicNameValuePair ( "q", "in vivo" )); // 创建表单数据Entité entité UrlEncodedFormEntity = nouvelleUrlEncodedFormEntity (params, "utf-8" ); // 设置表单Entité到HttpPost中 httpPost.setEntity (entité); réponse = client.execute (HttpPost); si (response.getStatusLine () getStatusCode () == 200. ) { Chaîne de contexte = EntityUtils.toString (response.getEntity (), "utf-8" ); System.out.println (contexte); } } Captures (Exception e) { e.printStackTrace (); } Enfin { si (réponse! = Null ) { try { response.close (); } Captures (IOException e) { e.printStackTrace (); } } Essayer { client.close (); } Captures (IOException e) { e.printStackTrace (); } } }
Mise en commun de connexion:
Si chaque demande doit créer HttpClient, il y aura des problèmes créent fréquemment et détruire, vous pouvez utiliser la mise en commun de connexion pour résoudre ce problème.
publique classe ConPool { publics statiques vides principaux (String [] args) jette IOException { PoolingHttpClientConnectionManager cm & lt = new new PoolingHttpClientConnectionManager (); // définir le nombre maximum de connexions cm.setMaxTotal (200 est ); // Définissez le nombre de chaque hôte concurrent cm.setDefaultMaxPerRoute (20 est ), le doGet (cm & lt); } privée statique non avenue la doGet (cm & lt PoolingHttpClientConnectionManager) lancers francs IOException { CloseableHttpClient client =. HttpClients.custom () setConnectionManager (cm & lt) .build (); HttpGet HttpGet = new new HttpGet ( "https://www.cnblogs.com/roadlandscape/" ); // paramètre la demande RequestConfig requestConfig = RequestConfig.custom () .setConnectTimeout ( 1000) // régler le temps maximum pour créer des connexions .setConnectionRequestTimeout (500) // régler le temps maximal recherché connecté .setSocketTimeout (10 * 1000) // temps maximum de données de conception transmis de .build (); HttpGet .setConfig (requestConfig); CloseableHttpResponse Response = client.execute (HttpGet); si (response.getStatusLine () getStatusCode () == 200. ) { Chaîne de contexte = EntityUtils.toString (response.getEntity (), "utf-8" ); System.out.println (contexte); } } }
1.1.1. Écrire du code