【问题标题】:make an HttpsURLConnection request with parameters by method post通过方法 post 使用参数发出 HttpsURLConnection 请求
【发布时间】:2019-07-15 22:01:17
【问题描述】:

处理发送其参数的 https 页面

Java8u201 使用 HttpsURLConnection

String httpsURL = "https://www.wmtechnology.org/Consultar-RUC/";
URL myUrl = null;

String[][] parameter = { { "modo", "1" }, { "btnBuscar", "Buscar" }, { "nruc", "10460332759" } };
System.out.println(parameter.toString());

try {
    myUrl = new URL(httpsURL);
    HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection();


    conn.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(parameter.toString());
    wr.flush();
    wr.close();

    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    String inputLine;
    while ((inputLine = br.readLine()) != null) {
        System.out.println(inputLine);
    }
    br.close();
} catch (IOException e) {
    e.printStackTrace();
}

返回页面但没有数据

【问题讨论】:

    标签: java javafx httpsurlconnection


    【解决方案1】:

    考虑使用一个为您处理底层连接/请求的库。 Apache HTTP 客户端有一个流畅的 API,这将使代码更容易编写:

            String result = Request
                    .Post("https://www.wmtechnology.org/Consultar-RUC/")
                    .bodyForm(Form
                            .form()
                            .add("modo", "1")
                            .add("btnBuscar", "Buscar")
                            .add("nruc", "10460332759")
                            .build())
                    .execute()
                    .returnContent()
                    .asString();
            System.out.println(result);
    

    更多信息在这里:https://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/fluent.html

    此请求确实返回数据。

    【讨论】:

    • 它也适用于 Apache HttpClient Fluent API,谢谢
    【解决方案2】:

    你错了就行了

    wr.writeBytes(parameter.toString());
    

    因为parameter.toString() 返回类似[[Ljava.lang.String;@1f554b06 的字符串,而不是预期的param1=value1&param2=value2 etc.

    所以把这部分改正为

        String parameterString = Arrays.stream(parameter)
                .map(pair -> pair[0] + "=" + pair[1])
                .collect(Collectors.joining("&"));
        wr.writeBytes(parameter.toString());
    

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 2013-02-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多