在平常生活中,我们发表文章,网站的链接老是很长,特别是淘宝的那种链接,更是长的离谱,特别不友好,故现在开始推短链接这种应用。 原理: 其实很简单,短链接商,把你的长连接存到他的数据库中,然后根据GUID生成一个唯一标识的短链接,这个链接是请求的他们的服务器。当别人访问这个短链接的时候,短链接商就从服务器上把你的长链接读出来,然后直接跳转到你的长链接地址。 难点: 主要还是模拟POST、GET请求。其他还是比较简单的。 我做了个百度的长链接转短链接的例子。新浪和腾讯的由于需要OAuth授权,这块目前还没有接触过,不太了解,以后了解吧。 我把我做的简单的demo贴出来。 HttpRequestHelper 作用:模拟HTTP的POST GET请求的 [code lang="csharp"] public class HttpRequestHelper { #region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name="Url">url</param> /// <param name="postDataStr">Post数据</param> /// <param name="cookie">Cookie容器</param> /// <returns></returns> public static string SendDataByPost(string Url, string postDataStr, ref CookieContainer cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postDataStr.Length; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } #endregion #region 同步通过GET方式发送数据 /// <summary> /// 通过GET方式发送数据 /// </summary> /// <param name="Url">url</param> /// <param name="postDataStr">GET数据</param> /// <param name="cookie">GET容器</param> /// <returns></returns> public static string SendDataByGET(string Url, string postDataStr, ref CookieContainer cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } #endregion } [/code] JsonHelper 作用:Json转换成对象 [code lang="CSharp"] public class JsonHelper { /// <summary> /// JSON格式字符转换为T类型的对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonStr"></param> /// <returns></returns> public static T ParseFormByJson<T>(string jsonStr) { T obj = Activator.CreateInstance<T>(); using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonStr))) { System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } } } [/code] BaiduLink 请求百度返回的json数据的实体 [code lang="CSharp"] public class BaiduLink { string _longurl; /// <summary> /// 长链接 /// </summary> public string longurl { get { return _longurl; } set { _longurl = value; } } string _status; /// <summary> /// 返回状态 /// </summary> public string status { get { return _status; } set { _status = value; } } string _tinyurl; /// <summary> /// 短链接 /// </summary> public string tinyurl { get { return _tinyurl; } set { _tinyurl = value; } } } [/code] 具体实现的代码: [code lang="CSharp"] //参考链接:http://www.baidu.com/search/dwz.html private void btnBaiDu_Click(object sender, EventArgs e) { /* 生成短网址 请求:向dwz.cn/create.php发送post请求,发送数据包括url=长网址 返回:json格式的数据 status!=0 出错,查看err_msg获得错误信息(UTF-8编码) 成功,返回生成的短网址 tinyurl字段 */ string longlink = tbLongLink.Text.Trim(); CookieContainer cookieContainer = new CookieContainer(); string result = HttpRequestHelper.SendDataByPost("http://dwz.cn/create.php", "url=" + longlink, ref cookieContainer); //{"longurl":"http:\/\/www.baidu.com\/s?tn=baiduhome_pg","status":0,"tinyurl":"http:\/\/dwz.cn\/2Up1h"} BaiduLink modelResult=JsonHelper.ParseFormByJson<BaiduLink>(result); tbShortLink.Text = modelResult.tinyurl; } [/code] 我把自己找的相关的资料贴出来:   1、百度长链接转短链接的API文档:http://www.baidu.com/search/dwz.html 2、新浪长链接转短链接的API文档:http://open.weibo.com/wiki/Short_url/shorten 3、腾讯长链接转短链接的API文档:http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3/%E5%85%B6%E4%BB%96/%E7%9F%ADurl%E5%8F%98%E9%95%BFurl

转载于:https://www.cnblogs.com/woaic/archive/2012/11/11/3943050.html

长链接转短链接的方法(百度、新浪、腾讯)相关推荐

  1. 【短链接】——新浪、百度、搜狐等官方长链接转短链接

    在项目中难免会生成自己的跳转链接,为了简化链接以及防止微信等屏蔽,可以用一些官方的api将自己的链接转为短链接. ConvertShortUrlUtil.java public class Conve ...

  2. 我把视频变成链接_如何把长链接变成短链接?3个工具帮你实现

    不管是文章还是视频的链接,很多时候都是长长的一串,如果是发给别人的话,就会显得啰里啰嗦,占用空间大不说,还非常难看,使用起来不方便.其实长链接也是能够变成短链接的,下面就带来三个工具,让链接变得美观又 ...

  3. http / 关于长连接和短链接的理解

    HTTP 协议是基于请求 / 响应模式的,因此只要服务端给了响应,本次 HTTP 请求就结束了,也可以理解成 HTTP 是面向请求 / 响应的. TCP 协议是面上连接的. 综上,如果 HTTP 请求 ...

  4. 长URL链接转短链接算法

    引言 很多大型网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就是把原始链接很长的地址压缩成只有6 个 ...

  5. 长链接转短链接java_新浪短网址API接口 - 长链接转短链接

    新浪短网址API接口是新浪对外公开的短网址生成接口,可以将长链接转短链接(生成的是 http://t.cn/xxxx 格式的),分享一个自己收藏的api接口,使用快一年了,一直都挺稳定的,觉得不错可以 ...

  6. 什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?

    文章目录 什么是长连接和短连接? 什么时候使用长连接.短链接? 定义 适用场景 什么是长连接和短连接? 在HTTP/1.0中默认使用短连接.也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连 ...

  7. HTTP的长链接和短链接说明

    HTTP的长链接和短链接实际上是TCP的长连接和短链接.首先我们先介绍一下TCP/IP协议组四层模型.其中包括以下: 应用层:HTTP.FTP.DNS.TELNET等协议 传输层:TCP.UDP 网络 ...

  8. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

  9. C#长链接转短链接(调用新浪api)

     /// <summary>  /// 长链接转短链接  /// </summary>  /// <param name="longUrl"> ...

最新文章

  1. bzoj4429: [Nwerc2015] Elementary Math小学数学
  2. 18道经典MySQL面试题,祝您升职加薪
  3. java groovyshell_在java中使用groovy怎么搞
  4. 分布式架构中一致性解决方案——Zookeeper集群搭建
  5. 基于实时计算(Flink)与高斯模型构建实时异常检测系统
  6. spring 第一篇(1-3):鸟瞰spring蓝图
  7. 第三周PLECS仿真实验
  8. [转载]JXTA Platform JAVA参考实现源代码分析系列文章(2)
  9. Spring学习的书-夏昕(2)
  10. linux shc shell脚本_用shc加密shell脚本
  11. python神经网络模型调用后预测值不变_用R语言实现神经网络预测股票实例
  12. mysql distance()_mysql距离函数st_distance
  13. HTML5学习第6篇—video:自己实现video的播放控件(添加样式版)
  14. ASAM XCP及驱动代码、ISO 11898+CANFD,ISO 14229,ISO 15031,ISO 15765相关标准文档
  15. 参考C++高级进阶教程
  16. 苹果认怂了!iPhone 将改用 USB-C 接口
  17. 直击产业落地 | 飞桨重磅推出业界首个模型选型工具
  18. 从新手到专家:如何设计一套亿级消息量的分布式IM系统
  19. 怎么将word2016的背景色改成护眼绿?
  20. ubuntu 自定义开机画面

热门文章

  1. 智融合·共未来丨智合同携手百融云创打造合同智能化应用服务平台
  2. 小猿圈讲解Linux常见的版本
  3. 魔性手游《刀剑大乱斗》源码-H5+安卓+IOS三端源码
  4. 何光驰老师-沪师经纪
  5. [转载]Modelsim中信号部分的组合
  6. 求极限常用方法(后五种)
  7. 绕开陨石救人(星环笔试2题)
  8. Spring 依赖注入三种方式的实现,及循环依赖问题的解决(源码+XML配置)
  9. appium通过图像识别技术opencv解决密码键盘的模拟输入密码问题
  10. “智慧灯杆产业联盟理事会会议( 2020 )暨产业合作交流沙龙”在广州隆重召开...