Java实现HTTP POST提交表单数据示例

4星 · 超过85%的资源 需积分: 50 18 下载量 134 浏览量 更新于2024-09-13 收藏 2KB TXT 举报
"通过Java发起HTTP请求提交表单是Web开发中的常见操作,通常用于与服务器交互数据。以下是一种实现方式的示例代码。 在Java中,可以使用多种库来发起HTTP请求,如HttpURLConnection、HttpClient(Apache Commons)或OkHttp。这里展示的是使用HTML字符串构建一个表单并模拟用户提交的简单方法。这种方法适用于简单的场景,但实际项目中可能更倾向于使用HTTP客户端库以获得更好的控制和性能。 ```java String strHtml = ""; strHtml += "<form name=\"chinapnrPay\" id=\"chinapnrPay\" action=\"http://test.chinapnr.com/gar/RecvMerchant.do\" method=\"post\">"; strHtml += "<input type=\"hidden\" name=\"Version\" value=\"" + Version + "\"/>"; strHtml += "<input type=\"hidden\" name=\"CmdId\" value=\"" + CmdId + "\"/>"; strHtml += "<input type=\"hidden\" name=\"MerId\" value=\"" + MerId + "\"/>"; // ... 更多隐藏字段 ... strHtml += "<input type=\"hidden\" name=\"GateId\" value=\"" + GateId + "\"/>"; strHtml += "<input type=\"hidden\" name=\"UsrMp\" value=\"" + UsrMp + "\"/>"; strHtml += "</form>"; ``` 这段代码首先创建了一个HTML字符串,其中包含了多个隐藏输入字段,每个字段对应一个表单参数。这些参数如`Version`、`CmdId`、`MerId`等,都是向服务器发送请求时需要的数据。`action`属性指定了请求的URL,即`http://test.chinapnr.com/gar/RecvMerchant.do`,而`method`属性设为`post`表示使用POST方法提交数据。 然而,仅仅构建HTML字符串是不够的,还需要将其提交到服务器。一种方法是使用JavaScript在浏览器环境中执行这段HTML,自动提交表单: ```html <script> document.write(strHtml); document.getElementById('chinapnrPay').submit(); </script> ``` 另一种方法是在服务器端使用Java执行HTTP POST请求,这通常涉及使用HTTP客户端库。例如,使用HttpURLConnection: ```java URL url = new URL("http://test.chinapnr.com/gar/RecvMerchant.do"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); try (OutputStream out = connection.getOutputStream()) { out.write(strHtml.getBytes(StandardCharsets.UTF_8)); } int responseCode = connection.getResponseCode(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); ``` 以上代码片段创建了连接,设置为POST请求,并将构建的HTML字符串作为请求体写入。然后读取响应并打印出来。 请注意,这种做法并不推荐用于复杂的交互,因为手动构造HTML字符串并发送POST请求可能会导致编码问题、安全性问题和维护困难。在实际开发中,推荐使用成熟的HTTP客户端库,如Apache HttpClient或OkHttp,它们提供了更强大的功能和更好的错误处理机制。 在使用HTTP客户端库时,你可以创建一个HTTP请求,添加表单参数,然后发送请求,如下所示(以Apache HttpClient为例): ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://test.chinapnr.com/gar/RecvMerchant.do"); List<NameValuePair> formParams = new ArrayList<>(); formParams.add(new BasicNameValuePair("Version", Version)); formParams.add(new BasicNameValuePair("CmdId", CmdId)); // ... 添加其他参数 ... httpPost.setEntity(new UrlEncodedFormEntity(formParams)); CloseableHttpResponse response = httpClient.execute(httpPost); try { System.out.println(response.getStatusLine()); HttpEntity entity = response.getEntity(); EntityUtils.consume(entity); } finally { response.close(); httpClient.close(); } ``` 这段代码创建了HttpClient实例,构造了一个HttpPost对象,添加了表单参数,然后执行请求。最后,它处理响应并关闭连接。 Java发起HTTP请求提交表单涉及构建请求参数、选择合适的HTTP客户端库(如果需要)以及处理服务器响应。在实际应用中,务必考虑安全性、性能和可维护性,确保代码符合最佳实践。"