我不认为这是可行的,所以也许我需要一种全新的方式来查看问题。Java - 从文件中读取时,在循环中动态插入用户名和密码
我的Java程序连接到一个Web窗体并登录。我有用户名和密码的另一部分代码。 HTML表单显然会包含不同的输入类型。根据用户和网站的不同,每个字段的命名都会有所不同。这里有一个简单的Web表单:
<FORM METHOD=POST ACTION="/my.form">
Username:
<INPUT NAME="username">
<BR>
Password
<INPUT TYPE="PASSWORD" NAME="password">
<INPUT TYPE="HIDDEN" NAME="my-hidden-name" VALUE="someValue">
<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>
在这种形式下,NAME
字段可以是任何东西,会改变形式站点到站点。我已经解决此得到通过要求PROPERTIES
文件存储的字段,如:
username
password
my-hidden-name=someValue
SUBMIT=Login
这适用于上述领域的一半。问题是username
和password
字段。
我已经有用户名和密码,所以我可以只是做:if(currentField=="password") string=mypass123
。但如果有人制作了一个表单,其中用户名/密码字段被称为user1
或passwordField
,或基本上除了我在if()
中放入的内容之外的任何内容!
所以,任何人都可以提出一种方法,我可以处理任何名称的组合,并仍然确定哪些是用户名和密码字段?这是我目前的代码:
//Read file logic here
Properties formProps=getDataFromResource(pathToFormFieldsPropfile);
if(null!=formProps)
{
//Gets a list of all the field names, eg "username", "password", "submit"
Enumeration<?> formFields=formProps.keys();
while(formFields.hasMoreElements())
{
String tempString=(String) formFields.nextElement(); //This gets the field name
query+=tempString //Will contain field name
+"=" //Used as a divider in the querystring, ie field=value
+formProps.get(tempString) //Value corresponding to field
//+ URLEncoder.encode((String) formProps.get(tempString),Charset.defaultCharset().toString()) //The value needs to be encoded for POST
+"&"; //The trailing one of these will have to be removed at the end
}
}
谢谢!
对不起,但什么是“ID元素”? – eoinzy 2012-03-27 00:11:21
关于命名约定,网站将已经制作完成,所以字段名称已经存在。我想,如果最坏的情况发生,我可以强制他们在PROPERTIES文件中加上一个下划线或前缀,然后进行处理,最后修剪前缀。问题是如果有一个网站的字段已经以我选择的任何模式开始。 – eoinzy 2012-03-27 00:25:30