programing

권장되지 않는 Java Http Client - 얼마나 어렵습니까?

goodjava 2022. 11. 10. 20:46

권장되지 않는 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