服装商城小程序开发_使用UrlConnection完成后台模仿

使用UrlConnection实现后台模拟http请求的简单实例     投稿:lqh   这篇文章主要介绍了使用UrlConnection实现后台模拟http请求的简单实例的相关资料,需要的朋友可以参考下

使用UrlConnection实现后台模拟http请求的简单实例

这两天在整理看httpclient,然后想自己用UrlConnection后台模拟实现Http请求,于是一个简单的小例子就新鲜出炉了(支持代理哦):

public class SimpleHttpTest { 
 public static String send(String urlStr, Map String,String map,String encoding){ 
 String body=""; 
 StringBuffer sbuf = new StringBuffer(); 
 if(map!=null){ 
 for (Entry String,String entry : map.entrySet()) { 
 sbuf.append(entry.getKey()).append("=").append(entry.getValue()).append(" 
 if(sbuf.length() 0){ 
 sbuf.deleteCharAt(sbuf.length()-1); 
 // 1、重新对请求报文进行 GBK 编码 
 byte[] postData = null; 
 try { 
 postData = sbuf.toString().getBytes(encoding); 
 } catch (UnsupportedEncodingException e) { 
 e.printStackTrace(); 
 // 2、发送 HTTP(S) 请求 
 OutputStream reqStream = null; 
 InputStream resStream = null; 
 URLConnection request = null; 
 try { 

 System.out.println("参数:" + sbuf.toString()); 
 //A、与服务器建立 HTTP(S) 连接 
 URL url = null; 
 try { 
 Proxy proxy = new .Proxy.Type.HTTP,new InetSocketAddress("127.0.0.1", 8087)); 
 url = new URL(urlStr); 
 request = url.openConnection(proxy); 
 request.setDoInput(true); 
 request.setDoOutput(true); 
 } catch (MalformedURLException e) { 
 e.printStackTrace(); 
 } catch (IOException e) { 
 e.printStackTrace(); 
 //B、指定报文头【Content-type】、【Content-length】 与 【Keep-alive】 
 request.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); 
 request.setRequestProperty("Content-length", String.valueOf(postData.length)); 
 request.setRequestProperty("Keep-alive", "false"); 
 request.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); 
 //C、发送报文至服务器 
 reqStream = request.getOutputStream(); 
 reqStream.write(postData); 
 reqStream.close(); 
 //D、接收服务器返回结果 
 ByteArrayOutputStream ms = null; 
 resStream = request.getInputStream(); 
 ms = new ByteArrayOutputStream(); 
 byte[] buf = new byte[4096]; 
 int count; 
 while ((count = resStream.read(buf, 0, buf.length)) 0) { 
 ms.write(buf, 0, count); 
 resStream.close(); 
 body = new String(ms.toByteArray(), encoding); 
 } catch (UnknownHostException e) { 
 System.err.println( "服务器不可达【" + e.getMessage() + "】"); 
 } catch (IOException e) { 
 e.printStackTrace(); 
 } finally { 
 try { 
 if (reqStream != null) 
 reqStream.close(); 
 if (resStream != null) 
 resStream.close(); 
 } catch (Exception ex) { 
 System.out.println("交易响应结果:"); 
 System.out.println(body); 
 return body; 
 public static void main(String[] args) { 
 String url="iframe/"; 
 Map String, String map = new HashMap String, String 
 map.put("code", "js"); 
 map.put("day", "0"); 
 map.put("city", "上海"); 
 map.put("dfc", "1"); 
 map.put("charset", "utf-8"); 
 send(url, map,"utf-8"); 

结果如下:


参数:dfc=1 charset=utf-8 day=0 code=js city=上海 
交易响应结果: 
(function(){var w=[];w['上海']=[{s1:'阴',s2:'阴',f1:'yin',f2:'yin',t1:'17',t2:'14',p1:'≤3',p2:'≤3',
d1:'东北风',d2:'东北风'}];var add={now:':33',time:'',update:'
北京时间11月11日17:10更新',error:'0',total:'1'};window.SWther={w:w,add:add};})();//0 

代码中的步骤写的很明白了,如果你有心,还可以对该方法进行各种封装,方便使用。下篇我会分享一下httpclient是如何模拟后台来发送http请求的,还有配置ssl、代理、自定义header等等,敬请期待吧。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!