Как использовать новый класс URLConnection для устаревшего класса HTTPClient

Я пытаюсь использовать класс в моем приложении. До сих пор он работал с классом HTTPClient. Но теперь класс HTTpClient устарел, мне нужно использовать класс URLConnection. Я хочу заменить следующий фрагмент кода, но я не понимаю, как это сделать. Может кто-нибудь, пожалуйста, дайте мне знать. как это сделать ниже мой текущий код:

HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse response = httpClient.execute(httpPost, localContext);
        InputStream in = response.getEntity().getContent();
        DocumentBuilder builder = DocumentBuilderFactory.newInstance()
                .newDocumentBuilder();
        Document doc = builder.parse(in);

Как я могу заменить вышеуказанный кусок кода классом URLConnection из класса HTTPClient?

1 ответ

Вот пример для POST:

private void sendPost() throws Exception {

    String url = "your_url";
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    //add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");


    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());

}

Для получения более подробной информации, перейдите через Как отправить HTTP-запрос GET/POST в Java.

Для всех устаревших классов посмотрите на JavaDoc, он будет подсказывать, какой класс использовать для замены старого кода. Пример:

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

Поэтому я предлагаю использовать

HttpClientBuilder.create().build();

Как build() метод возвращает CloseableHttpClient который является AutoClosableвы можете поместить объявление в оператор try-with-resources (Java 7+):

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

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

} catch (IOException e) {

// handle

}

Надеюсь, поможет!

Другие вопросы по тегам