私がやろうとしているのは、いくつかのJSONをダウンロードしてそれをオブジェクトに逆シリアル化することです。私はまだJSONをダウンロードすることができませんでした。
Apacheサイトにあるものも含めて、私が見つけることができるほとんどすべての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
や他にもたくさんのバリエーションを試してみて、役に立つ結果が得られないので試してみました。明らかに何かが足りません。
Webページのコンテンツをダウンロードするための正しいJava 7の方法は何ですか?その言語の一部として、まともなHttp Clientが本当にないのでしょうか。それを信じるのは難しいと思います。
これに対する私の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();
編集(ジュールの提案後):
build()
メソッドはCloseableHttpClient
を返しますis-aAutoClosable
なので、宣言をリソース付きのステートメントに配置できます(Java 7+)。
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
// use httpClient (no need to close it explicitly)
} catch (IOException e) {
// handle
}
私見受け入れられた答えは正しいですがそれが答えを思いつく方法を説明しないのでいくつかの「教え」を逃します。すべての非推奨クラスについては、 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()) {...}
利点は、最後に対処する必要がないこととnullです。
その他の関連情報
Apacheからの例これを使ってください:
HttpClient httpclient = HttpClients.createDefault();
クラスorg.Apache.http.impl.client.HttpClients
はバージョン4.3以降にあります。 HttpClients.createDefault()
のコードは、ここで受け入れられている答えと同じです。
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
LATEST
バージョンの仕様により、使用するバージョン4.3-alpha1
では推奨されません。クラスの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();
次の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;
}
}
DefaultHttpClientを使用する代わりに HttpClient を作成するには HttpClientBuilder を使用します。
例:
MinimalHttpClient httpclient = new HttpClientBuilder().build();
// Prepare a request object
HttpGet httpget = new HttpGet("http://www.Apache.org/");