无法找出正确的参数来模仿Java中的网站表单

时间:2011-10-04 21:06:18

标签: java html forms

我是网站源代码和Java的初学者,我正试图想出一种以编程方式访问某个网站的方法。我想出了登录/身份验证部分,但现在我陷入了相当容易的事情。我需要告诉Java从选项列表中进行选择,但我无法确定要为以下源代码发送的参数:

<FORM ACTION="/services/reinforce" METHOD="POST" onSubmit="return checkSubmit()">
<INPUT TYPE="hidden" NAME="call1" VALUE="search">
<TABLE  CLASS="Data_table" summary="Select an option"width="100%"><CAPTION class="ctext">Search:    </CAPTION>
<TR>
<TD CLASS="default"><LABEL for=input_id><SPAN class=fvisible>Options</SPAN></LABEL>
<SELECT NAME="val_num" SIZE="1"  ID="optionId">
<OPTION VALUE="">None
<OPTION VALUE="1">Option 1
<OPTION VALUE="2">Option 2
<OPTION VALUE="3">Option 3
<OPTION VALUE="4">Option 4
<OPTION VALUE="5">Option 5
<OPTION VALUE="6">Option 6
<OPTION VALUE="7">Option 7
...

例如,如果我想选择选项1,我通常会做的是

String data = URLEncoder.encode("val_num", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8"); 

不知怎的,它正在工作,它没有返回FileNotFoundException,但是它将我重定向到另一个链接。当我在任何浏览器中手动执行它时它工作正常,它将我重定向到Option1。什么可能是错的?

2 个答案:

答案 0 :(得分:2)

您是否也在发送与隐藏输入元素对应的参数。

String data = "call1=search&val_num=1";

(注意,当您可以清楚地看到该字符串仅包含URL安全字符时,无需进行URL编码。)

此外,我假设您将此数据字符串传递给POST请求(而不是GET请求)。这是对的吗?

答案 1 :(得分:1)

这是一张清单:

  1. 您是否向/services/reinforce发送了POST请求?
  2. 在提交表单之前,checkSubmit() JavaScript函数是否对表单的input / select / textarea元素进行了任何更改?如果是这样,您需要模拟使用POST请求发送的数据中的这些更改。 (可能有助于编辑您的问题并添加checkSubmit()功能的来源。)
  3. 您是否将请求内容类型设置为application/x-www-form-urlencoded
  4. 您是否正在发送相应的授权?通常,网站会在成功验证后发送cookie。您是否发送了正确的Cookie标题?
  5. data是POST请求的内容正文吗?
  6. 您是否尝试过发送call1=search身体?也许隐藏的领域也是必要的。
  7. 您发送了哪个User-Agent标题?