如果这个问题已经存在,我道歉,但我不知道该搜索什么来找到它。
我想要实现的目标是,我希望与使用Java的URL页面上的JavaScript组件进行交互。例如,如果我有文本字段:
<input type="text" class = "input_text" name = "notes" maxlength="100"
style="width:100px" placeholder = "Extra Notes" />
如何在文本字段中输入Java类型?
更具体地说,有几个文本字段,然后有两个下拉菜单需要输入数据。然后我需要按一个按钮,将信息发送到服务器。
如果不可能,另一个选项是将信息直接发送到他们的服务器。这实际上是理想的方式,但是如何通过按F12确切地找到发送到服务器的内容?
谢谢,我希望这是有道理的。如果没有,请告诉我需要澄清的内容,我会尽力解释。
编辑:当我发布一些我不太了解的东西时,我从来不明白为什么会收到负面评论。还有其他人会有同样的问题,他们对Chrome开发工具(我认为F12打开的工具)了解不多,并会发现这个问题很有用。我无法找到问题答案的原因就是:人们对这个话题了解很多,并且看到像这样的问题,因为它听起来不合适。所以,请不要贬低,而是解释问题的错误,这样我才能开始朝着正确的方向前进,其他人也可以学习。
编辑2:在探索了所有内容一段时间后,学习了一些JavaScript,似乎&#34; Post&#34;按钮提交整个表单。在提交时,它会检查以确保表单中的某些字段不是空白。
表单以<form action = "http://example/index.php?.......section=action&do=example-here"...... />
开头。究竟是什么URL? (显然&#34;示例&#34;被实际网站名称替换)。当我链接到它时,它表示无效请求。我无法找到&#34;示例 - 这里&#34; (实际文本)在任何其他地方。我认为URL是发布我需要发布的内容的关键,但我无法弄清楚如何使用它。这个URL是我需要的吗?
答案 0 :(得分:2)
要与动态网页进行互动,您需要使用支持javascript的HtmlUnit
等框架。
HtmlUnit是“用于Java程序的GUI-Less浏览器”。它模拟HTML 文档并提供一个API,允许您调用页面,填写 表格,点击链接等...就像你在“正常”中做的那样 浏览器。
这种apis很好地理解了填写HTML
表单的要求,并且可以动态调用js / ajax组件来与服务器端进行交互。
答案 1 :(得分:0)
这里没有JavaScript。您发布的调用JavaScript的内容是HTML。
通过HTTP提交的HTML表单具有非常标准的形式。查看<form>
代码的action
属性,找出要提交的网址及其<input>
代码,找出要随其提交的参数。
这是一个发布表单的工作示例,然后将结果页面转储到System.out:
import java.io.*;
import java.net.* ;
import java.util.*;
class Test {
public static void main(String[] args) throws Exception {
URL url = new URL("http://example/index.php?.......section=action&do=example-here");
Map<String,String> params = new HashMap<>();
params.put("notes", "some silly text here");
params.put("other params that are in your form", "blah");
StringBuilder postData = new StringBuilder();
for (Map.Entry<String,String> param : params.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(param.getValue(), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0; System.out.print((char)c));
}
}
此示例使用您问题中的虚假网址,当然应将其更改为真实网址。请注意,&
不是网址的一部分;它只是&
字符的HTML编码。
如果真实表单需要登录,或者任何<input>
元素随表单页面的每个请求而变化,那么您需要做更多工作来模仿真实表单,在这种情况下@ PopoFibo的答案可能是最简单的方法。