zoukankan      html  css  js  c++  java
  • HttpClient向服务器提交数据

    导语

    有时你需要通过URLConnection向服务器写入数据,例如,使用POST向Web服务器提交表单,或使用PUT上传文件。getOutputStream() 方法返回一个OutputStream,可以用来向服务器发送数据。由于URLConnection 在默认情况下不允许输出,所以在请求输出流之前必须调用setDoOutput(true)。当将一个http URL的doOutput设置为true时,请求方式将会由GET变为POST方法。

    一个小案例

    try {
    			URL u = new URL("http://www.xdysite.cn/index.php");
    			URLConnection uc = u.openConnection();
    			uc.setDoOutput(true);
    			try (Writer w = new BufferedWriter(new OutputStreamWriter(uc.getOutputStream()))) {
    				w.write("username=xdy&password=123456");
    			}
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    

    向服务器提交表单

    上面的只是一个小案例来说明如何向服务器提交数据,下面我们将其功能进行完善。尽可能使用JAVA的封装特性。QueryString用于生成一个合法的表单。FormPoster 类提供表单的提交。在main方法中进行测试以及输出服务器返回的数据。

    QueryString类
    public class QueryString {
    	StringBuilder sb;
    	public QueryString(){
    		sb = new StringBuilder();
    	}
    	
    	public void add(String key, String val) {
    		sb.append(key + "=" + val + "&");
    	}
    
    	@Override
    	public String toString() {
    		sb.append("needless=0");
    		return sb.toString();
    	}
    }
    

    FormPoster类

    public class FormPoster {
    	private URL url;
    	private QueryString query = new QueryString();
    	
    	public FormPoster (URL _url) {
    		if(!_url.getProtocol().toLowerCase().startsWith("http"))
    			throw new IllegalArgumentException("Posting only works for http URLs");
    		url = _url;
    	}
    	
    	public void add(String name, String value) {
    		query.add(name, value);
    	}
    	
    	public URL getURL() {
    		return url;
    	}
    	
    	public InputStream post() throws IOException {
    		URLConnection uc = url.openConnection();
    		uc.setDoOutput(true);
    		try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(uc.getOutputStream()))) {
    			bw.write(query.toString());
    			bw.write("
    ");
    		}
    		return uc.getInputStream();
    	}
    }
    

    测试方法

    public static void main(String[] args) {
    		URL url;
    		try {
    			url = new URL("http://www.xdysite.cn/index.php");
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    			return;
    		}
    		
    		FormPoster poster = new FormPoster(url);
    		poster.add("username", "xdy");
    		poster.add("password", "12345");
    		
    		try (Reader r = new InputStreamReader(poster.post())) {
    			int c;
    			while ((c = r.read()) != -1) {
    				System.out.print((char)c);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
  • 相关阅读:
    iOS 应用内付费(IAP)开发步骤
    国内银行CNAPS CODE 查询 苹果开发者,应用内购,需要填写税务相关信息必须的
    untiy 插件工具: 游戏中 策划数据Excel 导出到项目中
    大陆 Google play 开发者注册(2016)
    unity UGUI动态字体显示模糊
    Vue--webpack实时重新加载
    Vue--webpack打包css、image资源
    Vue--webpack打包js文件
    Vue--axios
    Vue--生命周期
  • 原文地址:https://www.cnblogs.com/xidongyu/p/6169080.html
Copyright © 2011-2022 走看看