编辑一个值并使用HttpPost发布到http

时间:2013-08-30 18:53:14

标签: java http-post form-submit apache-httpclient-4.x

问题:我想在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中考虑?

感谢您的帮助。

1 个答案:

答案 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;另一个参数名称=另一个参数值