Use HttpURLConnection para enviar solicitudes POST y llevar parámetros de solicitud


1. Primero cree un objeto URL y especifique la dirección URL solicitada.

URL url = new URL("http://example.com/api");

2. Llame al método openConnection() del objeto URL para crear el objeto HttpURLConnection.

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

3. Establezca el método de solicitud en POST.

connection.setRequestMethod("POST");

4. Configure el encabezado de la solicitud, incluido el tipo de contenido, la longitud del contenido, etc. Entre ellos, Content-Type indica el formato del cuerpo de la solicitud y Content-Length indica la longitud del cuerpo de la solicitud.

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", String.valueOf(param.getBytes().length));

5. Establezca el tiempo de espera de conexión y el tiempo de espera de lectura.

connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

6. Permitir escribir y escribir datos en el servidor.

connection.setDoOutput(true);

connection.setDoInput(true);

7. Obtenga el flujo de salida y escriba los datos en el servidor.

OutputStream outputStream = connection.getOutputStream();
outputStream.write(param.getBytes());
outputStream.flush();
outputStream.close();


El parámetro aquí es el parámetro de solicitud, que debe convertirse en una matriz de bytes y luego escribirse en el flujo de salida.

8. Obtenga el código de respuesta para determinar si la solicitud se realizó correctamente.

int statusCode = connection.getResponseCode();

9. Lea los datos de respuesta.

InputStream inputStream = statusCode == 200 ? connection.getInputStream() : connection.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    response.append(line);
}
reader.close();
inputStream.close();


La respuesta aquí son los datos de respuesta, que deben leerse como una cadena antes de su uso.
El código de ejemplo completo es el siguiente:

String param = "name=张三&age=18";
URL url = new URL("http://example.com/api");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", String.valueOf(param.getBytes().length));
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setDoOutput(true);
OutputStream outputStream = connection.getOutputStream();
outputStream.write(param.getBytes());
outputStream.flush();
outputStream.close();
int statusCode = connection.getResponseCode();

InputStream inputStream = statusCode == 200 ? connection.getInputStream() : connection.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
   response.append(line);
}
reader.close();
inputStream.close();
connection.disconnect();
System.out.println(response.toString());

Cabe señalar que los parámetros de solicitud en el código de ejemplo anterior se pasan en forma de cadenas. Si necesita pasar parámetros de solicitud complejos, puede considerar el uso de formatos como JSON. Al mismo tiempo, si la URL solicitada necesita incluir parámetros de consulta, puede agregar parámetros de consulta a la URL.

Lo siguiente usa HttpURLConnection para enviar el tipo de parámetro de solicitud POST es json

El siguiente es un ejemplo del uso del applet HttpURLConnection WeChat para enviar mensajes de suscripción

Solicitud POST

json ensamblado en un JSONObject

json se parece a esto

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "data": {
      "name01": {
          "value": "某某"
      },
      "amount01": {
          "value": "¥100"
      },
      "thing01": {
          "value": "广州至北京"
      } ,
      "date01": {
          "value": "2018-01-01"
      }
  }
}
  try {

            URL url = new URL(" https://api.weixin.qq.com/cgi-bin/message/subscribe/send?" +
                    "access_token=" +
                    "自己的小程序token");

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");

            connection.setDoOutput(true);
            connection.setDoInput(true);

//构造发送给用户的订阅消息内容
            Map messageContent = new HashMap<String, Object>();
            messageContent.put("character_string1", new HashMap<String, Object>() {
   
   {
                put("value", "a123456789");
            }});
            messageContent.put("amount2", new HashMap<String, Object>() {
   
   {
                put("value", "1元");
            }});
            messageContent.put("thing3", new HashMap<String, Object>() {
   
   {
                put("value", "西安大学长安学区");
            }});
            messageContent.put("time4", new HashMap<String, Object>() {
   
   {
                put("value", "2021年10月20日");
            }});
            messageContent.put("thing5", new HashMap<String, Object>() {
   
   {
                put("value", "这是备注");
            }});
            JSONObject messageContentJson = new JSONObject(messageContent);

            //构造订阅消息
            Map subscribeMessage = new HashMap<String, Object>();
            subscribeMessage.put("touser", " 。。。");//填写你的接收者openid
            subscribeMessage.put("template_id", " 填写你的模板ID");//填写你的模板ID
            subscribeMessage.put("data", messageContentJson);
            JSONObject subscribeMessageJson = new JSONObject(subscribeMessage);
/*
            String s = subscribeMessageJson.toJSONString();
            System.out.println("JSONString:" + s);
*/
            String s1 = subscribeMessageJson.toString();
            System.out.println("String:" + s1);
            byte[] bytes = s1.getBytes();

            DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
            wr.write(bytes);
            wr.close();

            int statusCode = connection.getResponseCode();

            InputStream inputStream = statusCode == 200 ? connection.getInputStream() : connection.getErrorStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            inputStream.close();
            connection.disconnect();
            System.out.println(response.toString());

            connection.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }

Supongo que te gusta

Origin blog.csdn.net/ImisLi/article/details/129946651
Recomendado
Clasificación