加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:20:30 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 统一的URL编码 package demo0808.demo2;/** * 由于网络上HTTP的POST请求需要进行编码 * 以此来适应不同的操作系统 * 编码成统一的ASCII字符 * 本类对Q

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读