java http 表单提交_运用Java进行Http表单数据自动提交

统一的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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值