권장되지 않는 Java Http Client - 얼마나 어렵습니까?
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 Client는 정말 없는 것일까요?믿기 어렵네요.
이 일에 대한 나의 메이븐 의존은...
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
관련 Import:
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;
사용방법:
HttpClient httpClient = HttpClientBuilder.create().build();
편집(Jules의 제안 후):
처럼build()메서드는 a를 반환합니다.CloseableHttpClient어떤 것이-a AutoClosable선언은 try-with-resources 스테이트먼트(Java 7+)에 넣을 수 있습니다.
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
// use httpClient (no need to close it explicitly)
} catch (IOException e) {
// handle
}
IMHO가 받아들인 답변은 맞지만, 정답을 찾는 방법을 설명하지 않기 때문에 몇 가지 '가르침'을 놓쳤다.사용되지 않는 모든 클래스는 Java Doc을 참조해 주세요(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();
자동 클로즈 가능:
줄스가 코멘트에서 암시했듯이, 돌아온 학급은java.io.ClosableJava 7 이후를 사용하고 있는 경우는, 다음의 작업을 실시할 수 있습니다.
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}
장점은 최종적이고 null을 처리할 필요가 없다는 것입니다.
기타 관련 정보
또한 연결 풀링에 대한 내용을 읽고 시간 초과를 설정하십시오.
Apache의 예는 다음과 같습니다.
CloseableHttpClient httpclient = HttpClients.createDefault();
학급.org.apache.http.impl.client.HttpClients는 버전 4.3 이후부터 존재합니다.
의 코드HttpClients.createDefault()여기서 받아들여지는 답변과 동일합니다.
Try (유창한 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
버전에서는 폐지되었습니다.4.3-alpha1LATEST클래스의 무엇을 알 수 .javadoc은 javadoc입니다.HttpClientBuilder.
「 」 「 」 ) 。4.2.3의 개요DefaultHttpClient는 아직 폐지되지 않았습니다.
만약 당신이 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();
DefaultHttpClient 대신 HttpClient를 사용하여 HttpClient를 구축합니다.
예:
MinimalHttpClient httpclient = new HttpClientBuilder().build();
// Prepare a request object
HttpGet httpget = new HttpGet("http://www.apache.org/");
다음과 같은 Maven 종속성을 추가할 수 있습니다.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.1</version>
</dependency>
Java 코드에서 다음 가져오기를 사용할 수 있습니다.
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGett;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpUriRequest;
Java 코드에 다음 코드 블록을 사용할 수 있습니다.
HttpClient client = HttpClientBuilder.create().build();
HttpUriRequest httpUriRequest = new HttpGet("http://example.domain/someuri");
HttpResponse response = client.execute(httpUriRequest);
System.out.println("Response:"+response);
이것은 httpclient가 이 버전의 Android 22에서 권장하지 않는 문제에 적용한 해결책입니다.
public static String getContenxtWeb(String urlS) {
String pagina = "", devuelve = "";
URL url;
try {
url = new URL(urlS);
HttpURLConnection conexion = (HttpURLConnection) url
.openConnection();
conexion.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
if (conexion.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(conexion.getInputStream()));
String linea = reader.readLine();
while (linea != null) {
pagina += linea;
linea = reader.readLine();
}
reader.close();
devuelve = pagina;
} else {
conexion.disconnect();
return null;
}
conexion.disconnect();
return devuelve;
} catch (Exception ex) {
return devuelve;
}
}
원래의 문제에 대해서는, 이하의 논리를 적용해 주세요.
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPostRequest = new HttpPost();
언급URL : https://stackoverflow.com/questions/15336477/deprecated-java-httpclient-how-hard-can-it-be
'programing' 카테고리의 다른 글
| 사용자가 맨 아래로 스크롤했는지 확인합니다(창뿐만 아니라 모든 요소). (0) | 2022.11.10 |
|---|---|
| Python이 목록 사전을 만듭니다. (0) | 2022.11.10 |
| vuej의 tslint 오류를 자동 수정하려면 어떻게 해야 합니까? (0) | 2022.11.10 |
| 엔티티 프레임워크 6에 MySQL 연결을 사용할 수 없습니다. (0) | 2022.11.10 |
| 두 날짜의 차이를 어떻게 구합니까? (0) | 2022.11.05 |