gpt4 book ai didi

java - 如何使用 JAVA 以编程方式填写 Web 表单?

转载 作者:行者123 更新时间:2023-11-29 06:25:38 25 4
gpt4 key购买 nike

我只需要帮助以编程方式使用 填写 Web 表单.我使用 Apache HttpClient 4.0.1。表单如下所示:
Web Form Example

它的 HTML 代码如下所示:

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" <ol>Some tags</ol> <ol>
Do not show the ticket (pre)view when the user first comes to the "New Ticket" page.

Wait until they hit preview. Ticket Box (ticket fields along with description)</ol> <ol>form action="/tracenvir/newticket" method="post" id="propertyform"--div--input type="hidden" name="__FORM_TOKEN" value="dff95a43ddec5a653627d2c0"</ol>

<ol>input type="text" id="field-summary" name="field_summary" size="70"</ol> <ol>textarea id="field-description" name="field_description" class="wikitext" rows="10" cols="68"</ol> <ol>input type="hidden" name="field_status" value="new" </ol> <ol>

input type="submit" name="preview" value="Preview" </ol> <ol>

input type="submit" name="submit" value="Create ticket"</ol>

还有很多其他标签。这是我的 Java 代码:

DefaultHttpClient client = new DefaultHttpClient();

client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);

client.setCookieStore(new BasicCookieStore());


//**LOG IN**//


//System.setProperty("javax.net.ssl.trustStore", "/home/rauch/NetBeansProjects/jssecacerts");

HttpGet login = new HttpGet("http://localhost:8000/tracenvir/login");

client.getCredentialsProvider().setCredentials(AuthScope.ANY,

new UsernamePasswordCredentials("rauch", "qwerty"));

然后正确登录...我收到 200 OK,一切正常。

    //**POST NewTicket**

HttpPost post = new HttpPost("http://localhost:8000/tracenvir/newticket");

List<NameValuePair> formparams = new ArrayList<NameValuePair>();

formparams.add(new BasicNameValuePair("__FORM_TOKEN", cookies.get(1).getValue()));

formparams.add(new BasicNameValuePair("field_summary", "Someerror"));

formparams.add(new BasicNameValuePair("field_descryption","AnyDescryption"));

formparams.add(new BasicNameValuePair("field_type", "defect"));

formparams.add(new BasicNameValuePair("field_priority", "major"));

formparams.add(new BasicNameValuePair("field_milestone", "milestone3"));

formparams.add(new BasicNameValuePair("field_component", "comp2"));

formparams.add(new BasicNameValuePair("field_version", "1.0"));

formparams.add(new BasicNameValuePair("field_keywords", ""));

formparams.add(new BasicNameValuePair("field_cc", ""));

formparams.add(new BasicNameValuePair("field_owner", "java server"));

formparams.add(new BasicNameValuePair("field_status", "new"));

formparams.add(new BasicNameValuePair("submit", "Create ticket"));

try {

UrlEncodedFormEntity entity;

entity = new UrlEncodedFormEntity(formparams, "UTF-8");

post.setEntity(entity);

post.addHeader("Referer","http://localhost:8000/tracenvir/newticket");


HttpResponse response = client.execute(post);


System.out.println("Create ticket: "+response.getStatusLine());


client.getConnectionManager().shutdown();


} catch(UnsupportedEncodingException ex) {

ex.printStackTrace();

} catch(IOException ex) {

ex.printStackTrace();

}

并且服务器响应 HTTP/1.0 200 OK 。但是这个“新票”并没有出现在 ViewTickets 网页上。如果我用普通的网络浏览器做同样的事情,填写字段并按下“创建票证”按钮,一切正常,我可以在 ViewTickets 网页上看到这个 NewTicket。这是浏览器生成的请求:

__FORM_TOKEN=0856803edd721d8b9592231d&field_summary=fuckingStatusField&field_description=mmm+status&field_type=defect&field_priority=major&field_milestone=milestone1&field_component=component1&field_version=2.0&field_keywords=&field_cc=&field_owner=ubuntu-server&field_status=new&submit=Create+ticket)</ol>

为什么不起作用?默认情况下我不应该使用这个:

formparams.add(new BasicNameValuePair("__FORM_TOKEN", cookies.get(1).getValue()));<p></p>

DefaultHttpClient 必须这样做,但事实并非如此。如果我评论这条语句,服务器响应 HTTP/1.0 400 Bad Request

我应该怎么做才能正确填写此表格?

我试图模仿浏览器:首先 GET/newticket 页面,然后生成带有 header 的 POST 请求,例如浏览器生成......但以编程方式我从服务器获得 200 OK,但是这个 NewTicket 没有出现在票证列表中.

最佳答案

  1. 使用 Wireshark 等数据包捕获实用程序来监控 http 请求。

  2. 比较浏览器发送的内容和您的代码发送的内容。

  3. 相应地修改您的代码。

关于java - 如何使用 JAVA 以编程方式填写 Web 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com