通过方法post发出带有参数的HttpsURLConnection请求

时间:2019-07-15 22:01:17

标签: java javafx httpsurlconnection

处理发送其参数的https页面

使用HttpsURLConnection的Java8u201

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();
}

返回页面但没有数据

2 个答案:

答案 0 :(得分:1)

考虑使用一个库来为您处理基础的连接/请求。 Apache HTTP Client具有流利的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

此请求确实返回数据。

答案 1 :(得分:0)

你错了

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());