java - 如何通过提交表单下载网页?

标签 java

我想下载一个带有表单的网页,我需要填写此表单并提交,然后获取返回页面,如下所示:

当我用bone填充文本区域时,它会在文本区域中显示一些单词,这就是我想要的。但我的代码无法完成这个功能,以下是我的代码:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class DownForm {
   public static void doSubmit(String url, Map<String, String> data) throws Exception {
        URL siteUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        DataOutputStream out = new DataOutputStream(conn.getOutputStream());
        Set keys = data.keySet();
        Iterator keyIter = keys.iterator();
        String content = "";
        for(int i=0; keyIter.hasNext(); i++) {
            Object key = keyIter.next();
            if(i!=0) {
                content += "&";
            }
            content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8");
        }
        System.out.println(content);
        out.writeBytes(content);
        out.flush();
        out.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = "";
        while((line=in.readLine())!=null) {
            System.out.println(line);
        }
        in.close();
    }

    public static void main(String args[]){
    Map<String, String> data = new HashMap<String, String>();
    data.put("meshDataForm", "Pain and incapacity");
    try {
        doSubmit("http://www.ebi.ac.uk/Rebholz-srv/MeshUP/", data);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

最佳答案

我认为您不应该使用DataOutputStream。直接使用输出流。

顺便说一句,您使用 apache http components 可能会更容易或者可能 HtmlUnit来做到这一点。

关于java - 如何通过提交表单下载网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8768371/

相关文章:

java - 计算文本文件中的句子数

Java传递数组和对象值

java - 组织.hibernate.tool.schema.spi.CommandAcceptanceException : Error executing DDL via JDBC Statement

Java:如何修改子类的实例变量

java - 如何使用本地archetype-catalog.xml在intellij中创建maven项目

java - 在 Windows : Get unbuffered stdout from C program into Java program InputStream [Now with minimal example! ]

java - 从打包的 war 文件中排除本地 WEB-INF/lib jar

java - 我必须返回什么?方法插入

java - 如何使用zk的定时器在没有一个组件的情况下刷新所有页面

java - 使用 Tomcat 7 在单独的日志文件中记录 version.jsp 调用