177

私がやろうとしているのは、JSONをダウンロードして、オブジェクトに逆シリアル化することだけです。JSONをダウンロードするまでには至っていません。

apacheサイトの例を含め、私が見つけることができるほぼすべてのHttpClientの例は次のようになります...

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

public void blah() {
    HttpClient client = new DefaultHttpClient();
    ...
}

DefaultHttpClientただし、Netbeansはそれが非推奨であると言っています。私はグーグルを試してみましたDefaultHttpClient deprecatedが、考えられる限り多くのバリエーションがあり、有用な結果を見つけることができなかったので、明らかに何かが欠けています。

Webページのコンテンツをダウンロードするための正しいJava7の方法は何ですか?言語の一部としてまともなHttpクライアントは本当にありませんか?信じられない。

これに対する私のMavenの依存関係は...

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>LATEST</version>
    <type>jar</type>
</dependency>
4

10 に答える 10

270

関連する輸入品:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;

使用法:

HttpClient httpClient = HttpClientBuilder.create().build();

編集(ジュールの提案の後):

build()メソッドは-aであるaを返すのでCloseableHttpClient、宣言をtry-with-resourcesステートメント(Java 7以降)に配置できます。 AutoClosable

try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {

    // use httpClient (no need to close it explicitly)

} catch (IOException e) {

    // handle

}
于 2013-03-11T10:55:48.880 に答える
60

私見受け入れられた答えは正しいですが、答えを思いつく方法を説明していないため、いくつかの「教え」を見逃しています。非推奨のすべてのクラスについては、JavaDocを参照してください (ダウンロードするか、オンラインにする必要がない場合)。古いコードを置き換えるために使用するクラスが示されます。もちろん、すべてを教えてくれるわけではありませんが、これが始まりです。例:

...
 *
 * @deprecated (4.3) use {@link HttpClientBuilder}.  <----- THE HINT IS HERE !
 */
@ThreadSafe
@Deprecated
public class DefaultHttpClient extends AbstractHttpClient {

これで、使用するクラスができました。ビルダーHttpClientBuilderインスタンスを取得するコンストラクターがないため、代わりに静的メソッドが必要であると推測できます。ビルダーを取得したら、ほとんどのビルダーと同様にbuild メソッドがあることも推測できます。create

org.apache.http.impl.client.HttpClientBuilder.create().build();

自動閉鎖可能:

Jules がコメントで示唆したように、返されたクラスは を実装java.io.Closableしているため、Java 7 以降を使用している場合は、次のことができるようになりました。

    try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}

利点は、finally と null を処理する必要がないことです。

その他の関連情報

また、接続プーリングについて読んで、タイムアウトを設定してください。

于 2014-11-19T13:18:49.407 に答える
13

Apache の例では次のように使用されています。

CloseableHttpClient httpclient = HttpClients.createDefault();

このクラスorg.apache.http.impl.client.HttpClientsはバージョン 4.3 から存在します。

のコードは、ここで受け入れられた回答HttpClients.createDefault()と同じです。

于 2015-09-02T23:33:47.157 に答える
7

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

于 2014-04-30T21:56:22.860 に答える
6

バージョン仕様4.3-alpha1のため、ご使用のバージョンでは廃止されました。LATESTクラスの javadoc を見ると、代わりに何を使用すればよいかがわかりますHttpClientBuilder

最新の安定版 ( 4.2.3) では、DefaultHttpClientはまだ廃止されていません。

于 2013-03-11T10:45:39.663 に答える
4

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();
于 2013-03-11T10:55:41.817 に答える
2

DefaultHttpClient を使用する代わりに、 HttpClientBuilderを使用してHttpClientを構築します。

元:

MinimalHttpClient httpclient = new HttpClientBuilder().build();

 // Prepare a request object
 HttpGet httpget = new HttpGet("http://www.apache.org/");
于 2013-03-11T10:48:57.033 に答える
1

これは、このバージョンの Android 22 で httpclient が非推奨になった問題に私が適用した解決策です。

 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;
    }
}
于 2015-09-01T08:03:25.100 に答える