这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了使用 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("交易请求地址:" + urlStr);
- System.out.println("参数:" + sbuf.toString());
- //A、与服务器建立 HTTP(S) 连接
- URL url = null;
- try {
- Proxy proxy = new Proxy(java.net.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="http://php.weather.sina.com.cn/iframe/index/w_cl.php";
- 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");
- }
- }
结果如下:
- 交易请求地址:http: //php.weather.sina.com.cn/iframe/index/w_cl.php
- 参数: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: '2015-11-11 19:04:33',
- time: '1447239873',
- update: '
- 北京时间11月11日17:10更新',
- error: '0',
- total: '1'
- };
- window.SWther = {
- w: w,
- add: add
- };
- })(); //0
代码中的步骤写的很明白了,如果你有心,还可以对该方法进行各种封装,方便使用。下篇我会分享一下 httpclient 是如何模拟后台来发送 http 请求的,还有配置 ssl、代理、自定义 header 等等,敬请期待吧。
来源: http://www.phperz.com/article/17/0530/328893.html