Получение Корпус:
1. Создайте Maven проект, внедрение зависимости:
< Зависимостей > <! - HttpClient -> < зависимость > < идентификатор_группы > org.apache.httpcomponents </ идентификатор_группы > < артефакт > HttpClient </ артефакт > < версия > 4.5.3 </ версия > </ зависимость > <! - 日志-> < зависимость > < идентификатор_группы > org.slf4j </ идентификатор_группы > <артефакта> SLF4J-log4j12 </ артефакт > < версия > 1.7.25 </ версии > </ зависимость > <! - JUnit -> < зависимость > < идентификатор_группы > JUnit </ идентификатор_группы > < артефакт > JUnit </ артефакт > < версия > 4,12 </ версия > </ зависимость > </ зависимости >
2. Добавить 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 =% - д {YYYY-MM-дд чч: мм: сс, SSS} [% т] [% с] - [% р]% м% п
3. Введите тест кода, сбор данных
@Test общественного недействительными testFirst () бросает IOException { CloseableHttpClient клиент = HttpClients.createDefault (); HttpGet HttpGet = новый HttpGet ( "https://www.cnblogs.com/roadlandscape/" ); CloseableHttpResponse ответ = client.execute (HttpGet); если (response.getStatusLine () getStatusCode () == 200. ) { Строка контекста = EntityUtils.toString (response.getEntity (), "UTF-8" ); System.out.println (контекст); } }
GET запрос с параметрами:
@Test общественного недействительный testGetParam () { CloseableHttpClient клиент = HttpClients.createDefault (); // HttpGet HttpGet = новый HttpGet ( " https://s.taobao.com/search?q=vivo "); CloseableHttpResponse ответ = NULL ; попробуйте { URIBuilder строитель = новый URIBuilder ( "https://s.taobao.com/search" ); builder.addParameter ( "д", "естественный" ); HttpGet HttpGet = новый HttpGet (builder.build ()); ответ = client.execute (HttpGet); если (response.getStatusLine () getStatusCode () == 200. ) { Строка контекста = EntityUtils.toString (response.getEntity (), "UTF-8" ); System.out.println (контекст); } } Улов (Исключение е) { e.printStackTrace (); } Наконец { если (ответ! = NULL ) { попытка { response.close (); } Поймать (IOException е) { e.printStackTrace (); } } Попробовать { client.close (); } Поймать (IOException е) { e.printStackTrace (); } } }
запрос POST:
@Test общественного недействительный testPost () { CloseableHttpClient клиент = HttpClients.createDefault (); HttpPost HttpPost = новый HttpPost ( "https://www.cnblogs.com/roadlandscape/" ); CloseableHttpResponse ответ = NULL ; попытаться { ответ = client.execute (HttpPost); если (response.getStatusLine () getStatusCode () == 200. ) { Строка контекста = EntityUtils.toString (response.getEntity (), "UTF-8" ); System.out.println (контекст); } } Поймать(IOException е) { e.printStackTrace (); } Наконец { если (ответ! = NULL ) { попытка { response.close (); } Поймать (IOException е) { e.printStackTrace (); } } Попытаться { client.close (); } Поймать (IOException е) { e.printStackTrace (); } } }
запрос POST с параметрами:
@Test общественного недействительный testPostParam () { CloseableHttpClient клиент = HttpClients.createDefault (); CloseableHttpResponse ответ = NULL ; попробуйте { HttpPost HttpPost = новый HttpPost ( "https://s.taobao.com/search" ); // 创建存放参数的список List <пар имя> PARAMS = новый ArrayList <> (); params.add ( новый BasicNameValuePair ( "д", "естественный" )); // 创建表单数据Entity UrlEncodedFormEntity объект = новыйUrlEncodedFormEntity (PARAMS, "UTF-8" ); // 设置表单Entity到HttpPost中 httpPost.setEntity (юридическое лицо); ответ = client.execute (HttpPost); если (response.getStatusLine () getStatusCode () == 200. ) { Строка контекста = EntityUtils.toString (response.getEntity (), "UTF-8" ); System.out.println (контекст); } } Улов (Исключение е) { e.printStackTrace (); } Наконец { если (ответ! = NULL ) { попытка { response.close (); } Поймать (IOException е) { e.printStackTrace (); } } Попытаться { client.close (); } Поймать (IOException е) { e.printStackTrace (); } } }
Пулы соединений:
Если каждый запрос должен создать HttpClient, будут проблемы часто создавать и разрушать, вы можете использовать пул соединений, чтобы решить эту проблему.
общественный класс ConPool { общественных статический недействительный основной (String [] арг) бросает IOException { PoolingHttpClientConnectionManager см & лто = новый новый PoolingHttpClientConnectionManager (); // установить максимальное количество соединений cm.setMaxTotal (200 ); // Установить количество одновременного каждый хоста cm.setDefaultMaxPerRoute (20 ); doGet (см & л); } частного статического аннулированию на doGet (см & л PoolingHttpClientConnectionManager) броски IOException { CloseableHttpClient Client =. HttpClients.custom () setConnectionManager (см & л) .build (); HttpGet HttpGet = новый новый HttpGet ( "https://www.cnblogs.com/roadlandscape/" ); // установить параметр запроса RequestConfig requestConfig = RequestConfig.custom () .setConnectTimeout ( 1000) // установить время максимум для создания соединений .setConnectionRequestTimeout (500) // установить извлеченный максимальное время подключен .setSocketTimeout (10 * 1000) // максимальное время проектирования передаваемых данных .build (); HttpGet .setConfig (requestConfig); CloseableHttpResponse ответ = client.execute (HttpGet); если (response.getStatusLine () getStatusCode () == 200. ) { Строка контекста = EntityUtils.toString (response.getEntity (), "UTF-8" ); System.out.println (контекст); } } }
1.1.1. Написать код