Как отправить HTTP-запрос в Java? [Дубликат]

Отправка HTTP-запроса POST с использованием file_get_contents не так уж и трудна, на самом деле: как вы уже догадались, вам нужно использовать параметр $context.

приведенные в руководстве по PHP, на этой странице: Параметры контекста HTTP (цитирование) :

$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);

В принципе, вам необходимо создать поток, с нужными параметрами (есть полный список на этой странице) и использовать его в качестве третьего параметра для file_get_contents - ничего больше; -)

В качестве побочного : вообще говоря, для отправки запросов HTTP POST мы склонны использовать curl, который предоставляет множество опций, но все потоки - одна из приятных вещей PHP, о которых никто не знает ... слишком плохо ...

388
задан Yatendra Goel 8 August 2014 в 03:03
поделиться

4 ответа

Вы можете использовать java.net.HttpUrlConnection .

Пример ( отсюда ) с улучшениями. Включено в случае гниения ссылок:

public static String executePost(String targetURL, String urlParameters) {
  HttpURLConnection connection = null;

  try {
    //Create connection
    URL url = new URL(targetURL);
    connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded");

    connection.setRequestProperty("Content-Length", 
        Integer.toString(urlParameters.getBytes().length));
    connection.setRequestProperty("Content-Language", "en-US");  

    connection.setUseCaches(false);
    connection.setDoOutput(true);

    //Send request
    DataOutputStream wr = new DataOutputStream (
        connection.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.close();

    //Get Response  
    InputStream is = connection.getInputStream();
    BufferedReader rd = new BufferedReader(new InputStreamReader(is));
    StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
    String line;
    while ((line = rd.readLine()) != null) {
      response.append(line);
      response.append('\r');
    }
    rd.close();
    return response.toString();
  } catch (Exception e) {
    e.printStackTrace();
    return null;
  } finally {
    if (connection != null) {
      connection.disconnect();
    }
  }
}
294
ответ дан 22 November 2019 в 23:46
поделиться

Из Учебник Oracle по java

import java.net.*;
import java.io.*;

public class URLConnectionReader {
    public static void main(String[] args) throws Exception {
        URL yahoo = new URL("http://www.yahoo.com/");
        URLConnection yc = yahoo.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                yc.getInputStream()));
        String inputLine;

        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }
}
222
ответ дан 22 November 2019 в 23:46
поделиться

Я знаю, что другие порекомендуют http-клиент Apache, но он добавляет сложности (т. Е. Больше вещей, которые могут пойти не так), что редко бывает оправдано. Для простой задачи подойдет java.net.URL .

URL url = new URL("http://www.y.com/url");
InputStream is = url.openStream();
try {
  /* Now read the retrieved document from the stream. */
  ...
} finally {
  is.close();
}
69
ответ дан 22 November 2019 в 23:46
поделиться

Apache HttpComponents . Примеры для двух модулей - HttpCore и HttpClient сразу же помогут вам начать работу.

Не то, чтобы HttpUrlConnection - плохой выбор, HttpComponents абстрагируются от утомительного кодирования. . Я бы порекомендовал это, если вы действительно хотите поддерживать множество HTTP-серверов / клиентов с минимальным кодом. Кстати, HttpCore можно использовать для приложений (клиентов или серверов) с минимальной функциональностью, тогда как HttpClient следует использовать для клиентов, которым требуется поддержка нескольких схем аутентификации, поддержка файлов cookie и т. Д.

55
ответ дан 22 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: