【问题标题】:How to get a long url from a short url如何从短网址获取长网址
【发布时间】:2011-01-26 22:51:41
【问题描述】:

我想确定短网址的长网址是什么。我曾尝试使用 http HEAD 请求,但很少有返回的标头字段实际上包含与目标/长 url 有关的任何数据。

有没有: 1.有什么方法可以确定长网址吗? 2.如果可以,不下载目的地的body可以吗?

谢谢

【问题讨论】:

  • 什么是长网址,什么是短网址? stackoverflow.com 是长还是短? :)
  • 我假设他的短 URL 指的是 URL 缩短服务,例如 tinyurl.com 或 bit.ly
  • 我认为他的意思是来自 URL 缩短服务的 URL。您应该能够通过查看对 URL 的请求的响应标头来执行此操作,而无需实际开始流式传输正文。
  • bit.ly/cwz5Jd 是短 URL 的示例。 stackoverflow.com 是一个长 url 的例子
  • Stefan - 这正是我尝试过的

标签: cocoa-touch cocoa http bit.ly short-url


【解决方案1】:

发出 HTTP GET 请求,不要跟随重定向,分析 Location 头。这就是重定向的目标所在。

具体在 Cocoa 中,使用带委托的异步请求,在委托中处理 didReceiveResponse。第一个响应将是重定向响应。在处理程序中提取 URL 后,在连接上调用 [cancel]。

编辑:取决于提供者, HEAD 而不是 GET 可能会或可能不会工作。如果您不遵循重定向,则无论如何都不会加载响应数据,因此使用 GET 不会产生传输开销。

【讨论】:

    【解决方案2】:

    执行HEAD 并查找Location 标头。

    % telnet bit.ly 80
    Trying 168.143.173.13...
    Connected to bit.ly.
    Escape character is '^]'.
    HEAD /cwz5Jd HTTP/1.1
    Host: bit.ly
    
    HTTP/1.1 301 Moved
    Server: nginx/0.7.42
    Date: Fri, 12 Mar 2010 18:37:46 GMT
    Content-Type: text/html; charset=utf-8
    Connection: keep-alive
    Set-Cookie: _bit=4b9a89fa-002bd-030af-baa08fa8;domain=.bit.ly;expires=Wed Sep  8 14:37:46 2010;path=/; HttpOnly
    Location: http://www.engadget.com/2010/03/12/motorola-milestone-with-android-2-1-hitting-bulgaria-by-march-20/?utm_source=twitterfeed&utm_medium=twitter
    MIME-Version: 1.0
    Content-Length: 404
    

    【讨论】:

    • 这最终成为最正确的答案。完整的答案包括按照 Calmh 在此答案中的建议进行头部请求。可以从“connection willSendRequest....”委托方法中提取包含位置标头的响应,而不是从 didReceiveResponse 委托方法中提取。
    • HEAD 并不总是有效,但 GET 通常可以。 GET 的唯一警告是必须在 url 提取后取消连接以防止下载正文(如下面的 Seva 建议)
    • JK:你的意思是connection:willSendRequest:redirectResponse:。我认为您的评论是错误的,直到我查看它并看到选择器的第三个组件。
    【解决方案3】:

    LongUrlPlease 提供了一个扩展短网址的 API。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多