使用URLConnection实现post表单提交

来源:互联网 发布:步态分析数据 编辑:程序博客网 时间:2024/05/16 15:04

首先介绍下URLConnection,

        URLConnection是一个抽象类,表示指向url资源的活动连接,URLConnection有两个不同的但相关的用途。

首先,与URL相比,他对服务器的交互提供了更多的控制。URLConnection可以检查服务器发送的首部,并相应

的做出相应,它可以设置客户端请求中使用的首部字段。除此之外,URLConnection可以用POST、PUT和其他HTTP

请求想服务器发送数据。

首先直接看实现代码:

核心方法:

public InputStream post() throws IOException{URLConnection uc = url.openConnection();uc.setDoOutput(true);try (OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(),"UTF-8")){out.write(query.toString());out.write("\r\n");out.flush();} catch (Exception e) {e.printStackTrace();}return uc.getInputStream();}

如上代码可知,

必须要有uc.setDoOutput(ture);这一行,

表示可以向服务器输入数据。

接着,获取outputStream,并写入相关查询行。

接下来看其他相关类代码:

package anla.Network.uriAndUrl;import java.net.URLEncoder;public class QueryString {private StringBuilder query = new StringBuilder();public synchronized void add(String name,String value){query.append('&');encode(name,value);}public synchronized void encode(String name,String value){try {query.append(URLEncoder.encode(name,"UTF-8"));query.append('=');query.append(URLEncoder.encode(value, "UTF-8"));} catch (Exception e) {e.printStackTrace();}}public synchronized String getQuery(){return query.toString();}@Overridepublic String toString() {return super.toString();}}

以及整个类:

package anla.Network.urlConnection;import java.io.IOException;import java.io.InputStream;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;import anla.Network.uriAndUrl.QueryString;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");}this.url = url;}public void add(String name,String value){query.add(name, value);}public URL getURL(){return this.url;}public InputStream post() throws IOException{URLConnection uc = url.openConnection();uc.setDoOutput(true);try (OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(),"UTF-8")){out.write(query.toString());out.write("\r\n");out.flush();} catch (Exception e) {e.printStackTrace();}return uc.getInputStream();}}


有时间去研究下httpclient,看核心原理是否是这样的。







原创粉丝点击