내가하려고하는 일은 JSON을 다운로드하여 직렬화 해제하는 것입니다. 아직 JSON을 다운로드하는 것까지 멀지 않았습니다.
아파치 사이트의 예제를 포함하여 찾을 수있는 거의 모든 단일 HttpClient 예제는 다음과 같습니다.
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
public void blah() {
HttpClient client = new DefaultHttpClient();
...
}
그러나 Netbeans DefaultHttpClient
는 더 이상 사용되지 않는다고 말합니다 . 나는 인터넷 검색을 시도 DefaultHttpClient deprecated
하고 내가 생각할 수있는 다른 많은 변형을 시도했지만 유용한 결과를 찾을 수 없으므로 분명히 뭔가를 놓치고 있습니다.
웹 페이지의 컨텐츠를 다운로드하는 올바른 Java7 방법은 무엇입니까? 언어의 일부로 괜찮은 HTTP 클라이언트가 실제로 있습니까? 나는 그것을 믿기가 어렵다.
이것에 대한 나의 Maven 의존성은 …
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
답변
관련 수입품 :
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;
용법:
HttpClient httpClient = HttpClientBuilder.create().build();
편집 (Jules의 제안 후) :
는 AS build()
메소드가 리턴 CloseableHttpClient
하는 것입니다-A는 AutoClosable
, 당신은 시도 -과 – 자원 문 (자바 7+)의 선언을 배치 할 수 있습니다 :
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
// use httpClient (no need to close it explicitly)
} catch (IOException e) {
// handle
}
답변
IMHO는 정답을 맞지만 정답을 찾는 방법을 설명하지 않기 때문에 ‘교육’을 놓치게됩니다. 더 이상 사용되지 않는 클래스의 경우 JavaDoc을 살펴보십시오 (다운로드하지 않았거나 온라인 상태 가 아닌 경우 ). 이전 코드를 대체하는 데 사용할 클래스를 암시합니다. 물론 모든 것을 말해주지는 않지만 이것은 시작입니다. 예:
...
*
* @deprecated (4.3) use {@link HttpClientBuilder}. <----- THE HINT IS HERE !
*/
@ThreadSafe
@Deprecated
public class DefaultHttpClient extends AbstractHttpClient {
이제 빌더 인스턴스 HttpClientBuilder
를 얻는 생성자가 없기 때문에 사용할 클래스가 있습니다 . 대신 정적 메소드가 있어야한다고 생각할 수 있습니다 . 빌더가 있으면 대부분의 빌더에 대해 빌드 메소드 가 있다고 추측 할 수 있습니다 .create
org.apache.http.impl.client.HttpClientBuilder.create().build();
자동 폐쇄 :
Jules가 주석에서 암시 한 것처럼 반환 된 클래스는을 구현 java.io.Closable
하므로 Java 7 이상을 사용하면 다음을 수행 할 수 있습니다.
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}
장점은 finally 및 null을 처리 할 필요가 없다는 것입니다.
기타 관련 정보
답변
Apache의 예제는 다음을 사용합니다.
CloseableHttpClient httpclient = HttpClients.createDefault();
org.apache.http.impl.client.HttpClients
4.3 버전부터 클래스 가 있습니다.
의 코드 는 여기에 허용 된 답변HttpClients.createDefault()
과 동일 합니다.
답변
버전 사양으로 4.3-alpha1
인해 사용중인 버전에서 더 이상 사용되지 않습니다 LATEST
. 클래스의 javadoc을 살펴보면 대신 사용할 것을 알려줍니다 HttpClientBuilder
.
최신 안정 버전 ( 4.2.3
)에서는 DefaultHttpClient
아직 사용되지 않습니다.
답변
jcabi-http
유창한 Java HTTP 클라이언트 인을 사용해보십시오 ( 예 :
String html = new JdkRequest("https://www.google.com")
.header(HttpHeaders.ACCEPT, MediaType.TEXT_HTML)
.fetch()
.as(HttpResponse.class)
.assertStatus(HttpURLConnection.HTTP_OK)
.body();
이 블로그 게시물을 확인하십시오 : http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
답변
json 데이터 만 읽으려고하면 아래 방법을 사용하는 것이 좋습니다.
URL requestUrl=new URL(url);
URLConnection con = requestUrl.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder sb=new StringBuilder();
int cp;
try {
while((cp=rd.read())!=-1){
sb.append((char)cp);
}
catch(Exception e){
}
String json=sb.toString();
답변
사용 HttpClientBuilder을 빌드하는 HttpClient를 대신 사용 DefaultHttpClient을
전의:
MinimalHttpClient httpclient = new HttpClientBuilder().build();
// Prepare a request object
HttpGet httpget = new HttpGet("http://www.apache.org/");