精华内容
下载资源
问答
  • URL 长链地址转短链 URL地址

    千次阅读 2017-12-21 15:26:12
    场景: 在大部分情况下我们使用URl可以访问自己的或者别人的地址,但是有些时候这个URL实在是太长,比如你想在微博或者贴吧加个广告链接,但由于链接太长会导致不可访问。这个时候就需要你使用短链URL。二.短链的...

    一.场景:

    在大部分情况下我们使用URl可以访问自己的或者别人的地址,但是有些时候这个URL实在是太长,比如你想在微博或者贴吧加个广告链接,但由于链接太长会导致不可访问。这个时候就需要你使用短链URL。

    二.短链的原理:

    详细的原理还请百度专业的介绍。假如你使用的是新浪的短链生成接口生成短链,其可以理解为你把自己的原始链接告诉新浪的服务器,它给你返回一个短链地址。当你请求这个地址的时候,他会给你定向到原始的URL地址上访问对应的资源。

    三.代码实现
    1.选择你要生成短链的服务商,比如我用的是新浪。那么就需要在新浪注册自己的用户信息,若是公司的最好填写完全的公司信息,最终获取AppKey。

    2.参考文档地址: http://open.weibo.com/wiki/Short_url/shorten ,也可以登录自己注册的账户搜索Short_url,找到自己 适用得到接口文档。

    3.代码如下:

    httpArg:外部可访问需要转短链的原始url。
    AppKey: 自己申请的注册用户的AppKey。

        private static  String APIURL="http://api.t.sina.com.cn/short_url/shorten.json?source="自己的AppKey"&url_long=";
    
     public static String urltoshort(String httpArg) {
            String httpUrl=APIURL;
            BufferedReader reader = null;
            String result = null;
            StringBuffer sbf = new StringBuffer();
            String url_short="";
            try {
                httpUrl = httpUrl + URLEncoder.encode(httpArg,"UTF-8");
                URL url = new URL(httpUrl);
                System.out.println("url:"+httpUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
    
                connection.connect();
                InputStream is = connection.getInputStream();
                reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String strRead = null;
                while ((strRead = reader.readLine()) != null) {
                    sbf.append(strRead);
                    sbf.append("\r\n");
                }
                reader.close();
                JSONArray js =new JSONArray(sbf.toString());
                JSONObject jb=(JSONObject)js.get(0);
                 url_short =jb.get("url_short").toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return url_short;
        }

    如有问题还请指正,共同探讨。

    展开全文
  • URL url = new URL(path);  HttpURLConnection conn = (HttpURLConnection) url.openConnection();  conn.setConnectTimeout(5000);  int max = conn.getContentLength();  InputStream is
    
    
    URL url = new URL(path);
       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
       conn.setConnectTimeout(5000);
       int max = conn.getContentLength();
       InputStream is = conn.getInputStream();
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       byte[] buffer = new byte[1024];
       int len;
     
       while ((len = is.read(buffer)) != -1) {
        baos.write(buffer, 0, len);
       }
       byte[] result = baos.toByteArray();
       return BitmapFactory.decodeByteArray(result, 0, result.length);
      } catch (Exception e) {
       e.printStackTrace();
       return null;
      }
    展开全文
  • 网页短地址(短链接、短链)是指将原本较长的网址转化成较短的网址,从而便于用户记忆、输入,便于在社交软件上的传播,以及为生成的二维码不至于太密集。很多互联网公司都提供了生成短链的服务,比如新浪微博短网址...

           网页短地址(短链接、短链)是指将原本较长的网址转化成较短的网址,从而便于用户记忆、输入,便于在社交软件上的传播,以及为生成的二维码不至于太密集。很多互联网公司都提供了生成短链的服务,比如新浪微博短网址服务:http://sina.lt/,本文主要整理实现短网址服务的基本原理。

           短网址服务的整个流程是:还以新浪微博短网址服务为例,用户输入想要缩短的长网址,转化后得到一个以http://t.cn开头的短网址,然后用户将该短网址通过微信或者微博等方式分享给朋友,其他人点击之后即可进入原本长网址所对应的页面。

           实现短网址服务主要有两个关键:

                  1、如何把一个任意长度的字符串转化成一个较短的字符串?

                  2、从短网址如何还原出长网址。

           很容易让人想到哈希算法,通过一定的方式将任意长的文本转化成一个固定长度的字符串,只要目标字符串的长度适当,那么不同的输入几乎对应的就是不同字符串。不过有个缺点就是无法从短网址还原成长网址,因此不适用我们的场景。但基于哈希算法的思想,我们可以设计一种以多进制为基础的算法完成这个任务。具体来说就是:

           我们可以创建一个用于保存长网址的数据表,这张表只有两个字段,一个自增主键用于保存id,另一个url字段用于存放原始的长网址,每个长网址都在这张表有一条记录。当进行长网址转换时,先检查数据表中是否存在该长网址,若是存在则直接获取该长网址的id,否则在数据表中创建一条新记录,并返回新生成的id。对于这个id,我们可以转化成一个多进制表示的新值。比如用以“0-9a-z”这36个字符表示的36进制,100000000(共9位数)这个数字可以被表示成1njchs,只需要6个字符即可,将这6个字符拼接到准备好的域名后即可得到一个对应的短网址返回给用户。由于一亿个网址只需要6个字符,因此这种方式足够满足大部分网站的需求。

           当用户点击短网址后,只需要将短网址中代表多进制的这部分提取出来,还原成十进制的数字作为id查表中的url即可得到原始的长网址,再把这个短网址的请求重定向到长网址即可让用户访问到原始的网页。

           另外,在根据长网址去数据表查找它是否存在时,因为长网址可以任意长,因此直接用它作为索引在数据表中查找的话效率较低,可以考虑在表中增加一个hash字段,保存长网址的哈希值,并通过查找哈希值来判断条目是否存在,提高查找的效率。

     

     

    转自:https://blog.csdn.net/MiMicoa/article/details/79834242

    展开全文
  • 这几天在写个小程序的时候,需要用到正则表达式匹配用户输入文本中的URL地址,然后将URL地址替换成可以点击的链接。URL地址的匹配,我想这应该是大家在做验证处理中常会用到的,这里就把我整合的个比较完整的...
  • 前几天整理面试题的时候,有一道试题是《如何将个很长的URL转换为个短的URL,并实现他们之间的相互转换?》,现在想起来这是个绝对不简单的问题,需要考虑很多方面,今天和大家一起学习研究一下! 短网址:...

    原文地址:https://www.itcodemonkey.com/article/8721.html
    一、前言
    前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多方面,今天和大家一起学习研究一下!

    短网址:顾名思义,就是将长网址缩短到一个很短的网址,用户访问这个短网址可以重定向到原本的长网址(也就是还原的过程)。这样可以达到易于记忆、转换的目的,常用于有字数限制的微博、二维码等等场景。

    关于短URL的使用场景,举个简单的例子来说明一下,看一下业务中使用短URL的重要性!

    二、短地址使用场景

    1、新浪微博

    我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:https://t.cn/RuPKzRW。为什么要这样做的?

    这是因为微博限制字数为140字一条,那么如果我们需要发一些链接上去,但是这个链接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的或者说用户体验很差的,所以短网址应运而生了,短网址这种服务可以说是在微博出现之后才流行开来的!往下看:

    (1)首先,我先发一条微博带有一个URL地址:

    (2)然后,看他转换之后显示的效果是什么样子的哪?

    (3)查看对应页面元素的HTML源码如下:

    (4)可以看出:https://blog.csdn.net/xlgen157387/article/details/79863301 被转换为:http://t.cn/RuPKzRW,此时你访问http://t.cn/RuPKzRW是可以定位到https://blog.csdn.net/xlgen157387/article/details/79863301,也就是实现了转换。

    2、短网址二维码

    网址在转换成短网址时,也可以生成相应的短网址二维码,短网址二维码的应用,二维码核心解决的是跨平台、跨现实的数据传输问题;而且二维码跟应用场景结合之后,所能解决的问题会越来越多。

    (1)短网址二维码相比短链接更方便,能少输入,尽量少输入,哪怕只是少点一下键盘,都是有意义的。

    (2)二维码只是扫描一个简单的链接,打开的却是一个世界。想象一下,用手机购买售货机里商品,二维码扫描是略快于从用手机找到该售货机并找到该商品的,而且这种操作相对于搜索/查找而言不是更优雅吗?

    (3)所有商超里面的商品,都是使用条码来确定商品的唯一性的,去买单的时候都是扫描条码。试想,如果里面加入了更多产品的生产日期、厂家、流转途径、原材料等等信息,是不是厉害了呢?特别是针对食品信息的可追溯上,二维码应用场景更广泛。

    三、短地址的好处

    除了上述场景中,我们将长地址转换为短地址的使用场景的优点(压缩URL长度)之外,短地址还具有很多实际场景中的优点,例如:

    (1)节省网址长度,便于社交化传播,一个是让URL更短小,传播更方便,尤其是URL中有中文和特殊字符,短网址解决很长的URL难以记忆不利于传播的问题;

    (2)短网址在我们项目里可以很好的对开放以及对URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,对同样的URL通过加密算法之后,得到的地址是一样的;

    (3)方便后台跟踪点击量、地域分布等用户统计。我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策;

    (4)规避关键词、域名屏蔽手段、隐藏真实地址,适合做付费推广链接;

    (5)当你看到一个淘宝的宝贝连接后面是200个“e7x8bv7c8bisdj”这样的字符的时候,你还会觉得舒服吗。更何况微博字数只有140字,微博或短信里,字数不够,你用条短网址就能帮你腾出很多空间来;

    四、短网址服务提供平台

    目前,国内网又很多提供短地址服务的平台,例如:

    新浪:http://sina.lt/

    百度:http://dwz.cn/

    0x3:http://0x3.me/

    MRW:http://mrw.so/

    等等还有很多,这个可以搜索一下就会有很多!但是一个注意的是,如果使用某一个平台的短地址服务,一定要保证长期可靠的服务,不然一段时间失效了,我们以前已经转换的URL就完了!

    这里以百度例,将我们上述博客的地址转换为短地址如下所示:

    当然,对于我们的业务来说,如果自己可以提供自己的短URL服务那才是更好的,不需要受制于人!(中国芯片需要崛起!!!)

    五、关于如何生成短地址URL的讨论

    关于短地址URL如何生成方式的,网上有很多方式,有基于映射的,有基于Hash的,有基于签名的,但是总的来说并不能满足绝大部分场景的使用,或者说是一种错误的设计方式。这里不再重复造轮子!以下是知乎用户iammutex关于该问题的探讨,截图过来和大家一起学习一下:

    六、生成短地址URL需要注意的

    看到上述知乎用户iammutex关于如何正确生成短地址URL的探讨,我们知道了,可以通过发号器的方式正确的生成短地址,生成算法设计要点如下:

    (1)利用放号器,初始值为0,对于每一个短链接生成请求,都递增放号器的值,再将此值转换为62进制(a-zA-Z0-9),比如第一次请求时放号器的值为0,对应62进制为a,第二次请求时放号器的值为1,对应62进制为b,第10001次请求时放号器的值为10000,对应62进制为sBc。

    (2)将短链接服务器域名与放号器的62进制值进行字符串连接,即为短链接的URL,比如:t.cn/sBc。

    (3)重定向过程:生成短链接之后,需要存储短链接到长链接的映射关系,即sBc -> URL,浏览器访问短链接服务器时,根据URL Path取到原始的链接,然后进行302重定向。映射关系可使用K-V存储,比如Redis或Memcache。

    七、生成短地址之后如何跳转哪?

    对于该部分的讨论,我们可以认为他是整个交互的流程,具体的流程细节如下:

    (1)用户访问短链接:http://t.cn/RuPKzRW;

    (2)短链接服务器t.cn收到请求,根据URL路径RuPKzRW获取到原始的长链接(KV缓存数据库中去查找):https://blog.csdn.net/xlgen157387/article/details/79863301;

    (3)服务器返回302状态码,将响应头中的Location设置为:https://blog.csdn.net/xlgen157387/article/details/79863301;

    (4)浏览器重新向https://blog.csdn.net/xlgen157387/article/details/79863301发送请求;

    (5)返回响应;

    八、短地址发号器优化方案

    1、算法优化

    采用以上算法,如果不加判断,那么即使对于同一个原始URL,每次生成的短链接也是不同的,这样就会浪费存储空间(因为需要存储多个短链接到同一个URL的映射),如果能将相同的URL映射成同一个短链接,这样就可以节省存储空间了。主要的思路有如下两个:

    方案1:查表

    每次生成短链接时,先在映射表中查找是否已有原始URL的映射关系,如果有,则直接返回结果。很明显,这种方式效率很低。

    方案2:使用LRU本地缓存,空间换时间

    使用固定大小的LRU缓存,存储最近N次的映射结果,这样,如果某一个链接生成的非常频繁,则可以在LRU缓存中找到结果直接返回,这是存储空间和性能方面的折中。

    2、可伸缩和高可用

    如果将短链接生成服务单机部署,缺点一是性能不足,不足以承受海量的并发访问,二是成为系统单点,如果这台机器宕机则整套服务不可 用,为了解决这个问题,可以将系统集群化,进行“分片”。

    在以上描述的系统架构中,如果发号器用Redis实现,则Redis是系统的瓶颈与单点,因此,利用数据库分片的设计思想,可部署多个发号器实例,每个实例负责特定号段的发号,比如部署10台Redis,每台分别负责号段尾号为0-9的发号,注意此时发号器的步长则应该设置为10(实例个数)。

    另外,也可将长链接与短链接映射关系的存储进行分片,由于没有一个中心化的存储位置,因此需要开发额外的服务,用于查找短链接对应的原始链接的存储节点,这样才能去正确的节点上找到映射关系。

    九、如何用代码实现短地址

    说到这里终于说到重点了,很多小伙伴已经按捺不住了,不好意思让大家失望了,这只是一片简单的文章,并不能把这么繁杂的一个系统演示清楚!秉着不要重复造轮子的原则,这里给出一个为数不多还算可以的实现短地址的开源项目:urlshorter

    注意:urlshorter本身还是基于随机的方式生成短地址的,并不算是一个短地址发号器,因此会有性能问题和冲突的出现,和知乎用户iammutex 描述的实现方式还是有区别的!而关于短地址发号器的方式目前还没有找到更好的开源项目可供参考!

    项目地址:https://gitee.com/tinyframework/urlshorter

    十、总结

    到此为止,我们一起学习了什么是短地址,短地址的优点,如何选择一种正确的方式来实现我们的短地址,以及在码云上找到的一个还算可以的短地址生成项目,相信此时的你能够有一个更好的了解!

    展开全文
  • URL地址相对路径绝对路径

    千次阅读 2016-10-11 17:53:04
    在做进一步爬取之前,我们需要将这个地址转成完整的URL,其实URL和文件路径是相似的,看似很简单,实则有很多情况需要考虑,网上提供的很多方法都会有各种各样的问题,这里提供了个相对靠谱的方法,代码如下。...
  • 这个函数返回个字符串,绝对URL。 relUrl:相对网址。类型:字符串。 absUrl:绝对网址。类型:字符串。 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name...
  • JAVA将URL图片地址转换成byte[]数组

    千次阅读 2020-04-28 09:42:04
    在开发过程中,经常需要用到前端传个图片网络地址。然后后端需要吧这个地址转换成byte[]数组进行开发 ... * @param url 网络图片URL地址 * @return */ public static byte[] getFileStream(String ...
  • 如何将个长URL转换为个短URL、前言短网址:顾名思义,就是将长网址缩短到个很短的网址,用户访问这个短网址可以重定向到原本的长网址(也就是还原的过程)。这样可以达到易于记忆、转换的目的,常用于有...
  • 、网络URL图片地址转Bitmap public Bitmap getBitmap(String imgUrl) { InputStream inputStream=null; ByteArrayOutputStream outputStream=null; URL url = null; try { u...
  • 用php判断url地址并自动转换为超链接,在段字符串中用正则表达式匹配出url,在将url转换为超链接,点击可访问地址: <?php function autolink($foo) { $foo = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@...
  • 但是短地址是怎样生成的呢,也许有人会说实现个转化算法,例如hash、加密。但碰撞呢,URL这种精准的东西~  思路 1、Redis存储已产生的&lt;长地址:短地址&gt;映射,新地址先判定是否存在短地址 2、...
  • 这几天在写个小程序的时候,需要用到正则表达式匹配用户输入文本中的URL地址,然后将URL地址替换成可以点击的链接。URL地址的匹配,我想这应该是大家在做验证处理中常会用到的,这里就把我整合的个比较完整的...
  • URL地址中汉字的编码转换

    千次阅读 2019-06-13 20:09:24
    感觉也没什么大用处,但是有时候忍不住就想知道堆符号到底代表了什么东西 //服务器端: String encodeStr = URLEncoder.encode("中国","utf-8"); System.out.println("处理后:" + encodeStr); //处理...
  • 本文实例讲述了C#实现类似新浪微博长URL转地址的方法。分享给大家供大家参考。具体如下: 、前台判断用户输入URL的JS代码如下。 function CheckInput() { var $txtLength = $("#inp_text").val().length; if ...
  • var urlToJson = function(){ var ret = {}; window.location.search.substr(1).replace(/(\w+)=(\w+)/ig, function(a, b, c){ret[b] = unescape(c);... 调用这个方法返回个json对象,可以通过键名...
  • 自:...通俗的说就是虽然地址栏里的是html结尾的url,但实际上访问的是后台动态jsp(php、asp)页面。好像是种视觉欺骗。 实现这个技术也很容易,一般都会使用国外...
  • 近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP...干脆不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法: 再根据自己的理解,用Ja...
  • 用php判断url地址并自动转换为超链接,在段字符串中用正则表达式匹配出url,在将url转换为超链接,点击可访问地址: <?php function autolink($foo) { $foo = eregi_replace('(((f|ht){1}tp://)[-...
  • js验证URL经常会在项目中用到,突然看到个比较全面的验证函数,验证的情况包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口,FTP用户名等等信息,虽然还没来得及做测试,但是先收藏了。...
  •  很多人在用VS做网站或项目时,总是难免会遇到用来访问或到要跳转到的网页地址,一般来说href=""中要使用的都是相对地址(或本地地址),即:URL="XXX"来描述,而关于如何将URL地址转为我们想要的其他网站的http...
  • 问题: 浏览器url是解码decode后的: 当我们复制到其他地方就会自动编码: 解决: 在https里加个空格. 就能复制出来了. h ttps://www.baidu.com/s?wd=编码 也可以百度编码转换,用url解码.
  • 最近在做个在线视频网站。 优酷的视频很好获取,它直接提供了。现在怎么获取腾讯的swf地址,没有什么方法吗? 查看它的api好像也没有找到? 该怎么办啊。
  • URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。 现在已经成为种规范了,基本所有程序语言都有这种编码,如...
  • 这些环境的域名一般是一样的, 前端请求接口的url也会随着这些环境的变化而改变,手动修改有点麻烦,所以想个办法,让请求的地址根据域名改变而改变。第步:建立个RequestConfig.js 作为配置文件,内容如下:...
  • 自:http://www.webhek.com/get-absolute-url 对于Web程序员来说,处理简单的URL格式也许会成为场噩梦。试想一下,个网址里有很多组成部分都会影响你对它的解析方法: 是否以/字符开头 是否以//...
  • Django下有个比较隐含的函数url,在django/conf/urls/defaults模块中,虽然只有短短的10行代码,但功能却很了得。起初初学Django,并没有发现它,Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址...
  • 这些环境的域名一般是一样的, 前端请求接口的url也会随着这些环境的变化而改变,手动修改有点麻烦,所以想个办法,让请求的地址根据域名改变而改变。 第步: 建立个RequestConfig.js 作为配置文件,内容如下...
  •   让所有页面继承一下类即可实现url重写以后保持postback地址。 using System; using System.Web; using System.Web.UI; using System.IO; using System.Text; using System.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,049
精华内容 1,219
关键字:

url地址转一