사용자 도구

사이트 도구


java:apache_http_client

문서의 이전 판입니다!


Apache Http Client

Connection 갯수

  • HttpClient는 하나의 IP 혹은 domain name에 대한 접속 갯수가 기본적으로 5개로 제한돼 있다.
  • 고부하 서비스의 경우 이 갯수를 늘려줘야 한다.
HttpClient httpClient = HttpClientBuilder.create().useSystemProperties()
    .setMaxConnTotal([최대 커넥션 갯수])
    .setMaxConnPerRoute([IP/domain name당 최대 커넥션 갯수])
    ....

Connection/Socket Timeout

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);

Request Character Encoding

일반

HttpProtocolParams.setContentCharset(httpParams, "UTF-8");

POST 요청시 URL Encoded Form

UrlEncodedFormEntity 클래스 생성자에서 문자 인코딩 지정

HttpPost post = new HttpPost("http://....");
List<NameValuePair> params = new ArrayList<>();
 
params.add(new BasicNameValuePair("paramName", "param value"));
// params...
 
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

HttpAsyncClient

JVM 버그 대응

  • 아래와 같은 오류가 발생할 수 있다.
    
    Caused by: java.util.NoSuchElementException: null
    at java.util.ArrayList$Itr.next(ArrayList.java:757) ~[na:1.6.0_18]
    at org.apache.http.impl.cookie.BestMatchSpec.formatCookies(BestMatchSpec.java:189) ~[httpclient-4.1.3.jar:4.1.3]
    at org.apache.http.client.protocol.RequestAddCookies.process(RequestAddCookies.java:196) ~[httpclient-4.1.3.jar:4.1.3]
    at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:108) ~[httpcore-4.1.4.jar:4.1.4]
    at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:174) ~[httpcore-4.1.4.jar:4.1.4]
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:462) ~[httpclient-4.1.3.jar:4.1.3]
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) ~[httpclient-4.1.3.jar:4.1.3]
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) ~[httpclient-4.1.3.jar:4.1.3]
  • 이는 JVM의 Loop 최적화 관련 버그로 보이며 Java 8과 Java 7u60 이상 버전에서는 발생하지 않는다. 그 이하 버전에서는 JVM 시작시 다음과 옵션을 줘야 한다.
    -XX:-LoopUnswitching
java/apache_http_client.1428976302.txt.gz · 마지막으로 수정됨: 2015/04/14 10:51 저자 kwon37xi