欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

运用Java进行Http表单数据自动提交,运用java表单提交,统一的URL编码 pac

来源: javaer 分享于  点击 14869 次 点评:30

运用Java进行Http表单数据自动提交,运用java表单提交,统一的URL编码 pac


统一的URL编码

package demo0808.demo2;/** * 由于网络上HTTP的POST请求需要进行编码 * 以此来适应不同的操作系统 * 编码成统一的ASCII字符 * 本类对Query语句进行URL编码 * 键值对中间用=连接 * 不同的键值对用&连接 */import java.net.URLEncoder;public class QueryString {private StringBuilder query=new StringBuilder();private String charset="UTF-8";    /**     * 无参默认构造函数     */    public QueryString() {    }    /**     *  同步添加键值对     * @param name 参数名称     * @param value 参数值     */    public synchronized void add(String name,String value) {        query.append('&');        encode(name,value);    }    /**     * 同步进行URL编码     * @param name 参数名称     * @param value 参数值     */    private synchronized void encode(String name,String value) {        try {            query.append(URLEncoder.encode(name, charset));            query.append('=');            query.append(URLEncoder.encode(value,charset));        } catch (Exception ex) {            System.err.println("Bad VM can't support "+charset);        }    }    /**     * 同步获取查询字符串     * @return 字符串     */    public synchronized String getQuery() {        return query.toString();    }    /**     * 覆盖toString()方法     */    public String toString() {        return getQuery();    }}

基于Http的post请求键值对填写

package demo0808.demo2;/** * 针对HTTP协议的POST请求 * 表单自动填写 * 不考虑验证码识别 * 不考虑https类型的协议 */import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;public class FormPoster {    private URL url;    private QueryString queryString=new QueryString() ;    /**     * 构造函数     * @param url 统一资源位置符号     */    public FormPoster(URL url) {        if(!url.getProtocol().toLowerCase().startsWith("http")) {            System.err.println("Post只用于http协议!");            return;        }        this.url=url;    }    /**     *  添加参数-值对     * @param name 参数名称     * @param value 参数值     */    public void add(String name,String value) {        queryString.add(name, value);    }    /**     * 获取URL     * @return URL      */    public URL getURL() {        return url;    }    /**     *  获取网站相应的输入流     * @return 输入流     * @throws Exception 无法连接异常     */    public InputStream post() throws Exception {        URLConnection openConnection = url.openConnection();        openConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");        openConnection.setDoOutput(true);        OutputStream outputStream = openConnection.getOutputStream();        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");        outputStreamWriter.write(queryString.toString());        outputStreamWriter.write("\r\n");        outputStreamWriter.flush();        outputStreamWriter.close(); //刷新关闭流很重要,只有关闭了,才能获取输入流        return openConnection.getInputStream();    }}

测试代码

package demo0808.demo2;/** * 测试代码 */import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.URL;public class Test {    public static void main(String[] args) throws Exception {        URL url = new URL("https://uniportal.huawei.com/uniportal/login.do");        FormPoster formPoster = new FormPoster(url);        /**         * 以下是测试华为招聘网站登陆界面         */        formPoster.add("actionFlag", "loginAuthenticate");        formPoster.add("lang", "zh");        formPoster.add("redirect", "http://career.huawei.com/recruitment/login_index.html?redirect=http://career.huawei.com/recruitment/");        formPoster.add("uid", "用户名");        formPoster.add("password", "密码`");        InputStream inputStream = formPoster.post();        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);        File file=new File("outfile");        FileOutputStream fileOutputStream = new FileOutputStream(file);        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"UTF-8");        int c;        while((c=inputStreamReader.read())!=-1) {            System.out.print((char)c);            outputStreamWriter.write((char)c);        }        inputStream.close();        outputStreamWriter.close();        System.out.println();    }}
相关栏目:

用户点评