问题:我想在html页面中编辑一些表格,然后提交数据。
我已经阅读了HttpClient中的实体,我遇到了UrlEncodedFormEntity,据我所知你添加了参数,然后你可以发布它们。我发现这没关系,但我认为有一种不同的方式来发布更改的属性,因为jsoup有一个方便的方法来设置属性中的值。这是我尝试使用另一个实体StringEntity:
HttpPost post = new HttpPost(url);
post.setHeader("User-Agent", USER_AGENT);
post.setHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
post.setHeader("Accept-Charset", "UTF-8");
post.setHeader("Cookie", getCookies());
post.setHeader("Connection", "keep-alive");
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setEntity(new StringEntity(updatedHTML, ContentType.TEXT_HTML));
HttpResponse response = null;
response = client.execute(post);
其中updatedHTML
是包含我要发布的更改的完整html代码。
但正如你猜测的那样,它不起作用。
编辑:我不认为这是问题,但我也有一个sumbit按钮,我在这里忽略了它,是否也应该在updatedHTML
中考虑?
感谢您的帮助。
答案 0 :(得分:0)
你的方法有两个问题 你不能在StringEntity中传递一个html,因为它不是类的用法 StringEntity及其派生类旨在传递消息 第二个错误是您似乎使用库来更改html 你需要处理你发布的内容。这是一个例子。
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("your parameter name","your parameter value"));
formparams.add(new BasicNameValuePair("another parameter name","another paramete value"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
HttpPost httppost = new HttpPost("http://localhost/");
httppost.setEntity(entity);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
我做了一些假设:
你掌握了所有传递的参数(简单地说,你将改变不在html上但在url上工作的方法)
我的代码段中没有考虑异常处理。代码是一个简单的例子,向您展示如何处理表单
另请注意,UrlEncodedFormEntity将为您处理参数。例如。在我们的例子中&gt;
您的参数名称=您的参数值&amp;另一个参数名称=另一个参数值