Http短链接下载

短链接的原理

  通过将长的URL地址转换成较短的一段字符或数字组合,使得用户更方便地记忆和分享链接。这种转换过程需要借助短链接服务商提供的服务,通常是将长链接压缩成一个短的地址,然后在访问该地址时,将其重定向到原始的长链接地址。

  一般来说,短链接服务商会将长链接转换成一个短的、易于记忆的字符串或数字组合,如"bit.ly/abc123",然后在访问该地址时,将其重定向到原始的长链接地址,如"https://www.example.com/some/long/path/to/a/resource". 这个过程需要短链接服务商的支持,因为只有它们能

  短链接的转换方法有很多种,其中一种常用的方法是基于哈希算法,将长链接映射为短的字符串或数字。下面是一个简单的哈希算法示例:

  1. 将长链接进行哈希,得到一个固定长度的哈希值。
  2. 将哈希值转换为一个短的字符串或数字,例如将十进制的哈希值转换为 62 进制表示,使用数字和大小写字母来表示短链接。
  3. 将短链接存储在数据库中,并将其与原始的长链接地址进行关联。
  4. 当用户访问短链接时,将其重定向到关联的原始长链接地址。

另一种常用的方法是使用自增序列生成短链接,例如将自增的数字转换为 62 进制表示的字符串作为短链接。这种方法的缺点是容易被猜测和破解,因此需要添加一些防范措施,例如在生成短链接时添加随机因素。够将长链接转换成短链接,并提供重定向服务。

当访问一个短链接时,服务器会将访问请求重定向到该短链接所对应的原始长链接地址。这个重定向过程的具体实现是通过HTTP协议中的重定向机制来实现的。具体来说,当浏览器访问一个短链接时,服务器会返回一个HTTP 301或302状态码,告诉浏览器需要重定向到另一个URL地址。浏览器收到这个响应后,会根据重定向的URL地址发出新的请求,进而访问该短链接所对应的原始长链接地址。

例如,当访问短链接 http://bit.ly/2O6jDz6 时,服务器会返回一个HTTP 301状态码,并告诉浏览器需要重定向到原始长链接地址 https://www.example.com/article/123456 。浏览器会根据这个重定向地址,发出新的HTTP请求,访问该原始长链接地址。

总的来说,短链接的还原是通过HTTP协议中的重定向机制来实现的。

短链接的下载过程:

  1. 用户在浏览器或其他应用程序中输入短链接,发起访问请求。
  2. 服务器收到访问请求后,会将请求重定向到短链接对应的原始长链接地址。
  3. 浏览器或其他应用程序收到重定向响应后,会重新发起访问请求,获取原始长链接地址对应的内容
    //短链接处理
    void DownloadController:: shortLink(const QString& url)
    {
         m_Url = QUrl(url);
    
          if(m_Url.scheme() == QLatin1String("https") || m_Url.scheme() == QLatin1String("http")){
              QNetworkAccessManager manager;
              QNetworkRequest request(m_Url);
    
              for(int i=0;i<3;i++)
              {
                  //发出请求,获取目标地址的头部信息
                   QNetworkReply *reply = manager.head(QNetworkRequest(m_Url));
                   QEventLoop loop;
                   QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()), Qt::DirectConnection);
                   loop.exec();
                  QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
                      if(!possibleRedirectUrl.isNull()) {
                          QUrl redirectUrl = possibleRedirectUrl.toUrl();
                          if(redirectUrl.isRelative()) {
                              QUrl originalUrl = reply->request().url();
                              redirectUrl = originalUrl.resolved(redirectUrl);
                          }
    
                          // 重定向后的 URL
                          //qDebug() << "Redirection Target: " << redirectUrl.toString();
                         m_Url=redirectUrl;
                         }
                      else
                          break;
               }
          }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值