【问题标题】:Python: Convert those TinyURL (bit.ly, tinyurl, ow.ly) to full URLSPython:将那些 TinyURL(bit.ly、tinyurl、ow.ly)转换为完整的 URL
【发布时间】:2010-10-19 09:34:20
【问题描述】:

我只是在学习 python,对如何实现这一点很感兴趣。在寻找答案的过程中,我偶然发现了这个服务:http://www.longurlplease.com

例如:

http://bit.ly/rgCbf可以转换为:

http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place

我使用 Firefox 进行了一些检查,发现原始 url 不在标题中。

【问题讨论】:

    标签: python bit.ly tinyurl


    【解决方案1】:

    输入urllib2,这是最简单的方法:

    >>> import urllib2
    >>> fp = urllib2.urlopen('http://bit.ly/rgCbf')
    >>> fp.geturl()
    'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place'
    

    不过,作为参考,请注意httplib 也可以这样做:

    >>> import httplib
    >>> conn = httplib.HTTPConnection('bit.ly')
    >>> conn.request('HEAD', '/rgCbf')
    >>> response = conn.getresponse()
    >>> response.getheader('location')
    'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place'
    

    还有PycURL,虽然我不确定这是否是使用它的最佳方式:

    >>> import pycurl
    >>> conn = pycurl.Curl()
    >>> conn.setopt(pycurl.URL, "http://bit.ly/rgCbf")
    >>> conn.setopt(pycurl.FOLLOWLOCATION, 1)
    >>> conn.setopt(pycurl.CUSTOMREQUEST, 'HEAD')
    >>> conn.setopt(pycurl.NOBODY, True)
    >>> conn.perform()
    >>> conn.getinfo(pycurl.EFFECTIVE_URL)
    'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place'
    

    【讨论】:

    • 最好使用 HEAD 请求而不是 GET 来避免传输页面内容。 urllib 和 curl 可以做 HEAD,虽然 httplib 不能,我相信。
    • 更新了,httplib 并没有抱怨 HEAD……她是这么说的。
    • 只是有点困惑。在使用 urllib2 的第一个示例中,是发出 head 请求还是使用 get? (参考亚当的帖子)因为我在 httplib 和 pycurl 中看到了对 HEAD 的引用
    • 根据我的研究,我认为 urllib2 不支持 HEAD 请求。如果您只需要 HEAD,我发现的所有内容都建议使用 httplib。
    • 通读 urllib2 文档,我的印象是,在连接上调用 read() 之前,实际上没有下载任何内容,但老实说,我不确定这是否属实......
    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多