【问题标题】:URL Redirection not workingURL 重定向不起作用
【发布时间】:2014-08-30 12:50:31
【问题描述】:

以下是我使用的代码,

import unshortenit 

unshortened_uri,status = unshortenit.unshorten('http://4sq.com/1iyfyI5')

print unshortened_uri

print status

以下是输出:

https://foursquare.com/edtechschools/checkin/53ac1e5f498e5d8d736ef3be?s=BlinbPzgFfShr0vdUnbEJUnOYYI&ref=tw

Invalid URL u'/tanyaavrith/checkin/53ac1e5f498e5d8d736ef3be?s=BlinbPzgFfShr0vdUnbEJUnOYYI&ref=tw': No schema supplied

而如果我在浏览器中使用相同的 url,它会正确地重定向到实际的 url。知道为什么它不起作用吗?

【问题讨论】:

    标签: python url url-redirection


    【解决方案1】:

    有一个 301 重定向链:

    From:
    'http://4sq.com/1iyfyI5'
    
    To:
    'https://foursquare.com/edtechschools/checkin/53ac1e5f498e5d8d736ef3be?s=BlinbPzgFfShr0vdUnbEJUnOYYI&ref=tw'
    
    To:
    '/tanyaavrith/checkin/53ac1e5f498e5d8d736ef3be?s=BlinbPzgFfShr0vdUnbEJUnOYYI&ref=tw'
    

    unshortenit使用requests,requests无法理解最后的相对url

    更新:

    实际上,request lib 可以通过request.get 方法很好地自动处理http 重定向。

    例如

    import requests
    r=requests.get('http://4sq.com/1iyfyI5')
    r.status_code # 200
    r.url # u'https://foursquare.com/tanyaavrith/checkin/53ac1e5f498e5d8d736ef3be?s=BlinbPzgFfShr0vdUnbEJUnOYYI&ref=tw'
    

    但是unshortenit 不想要 HTTP GET 的开销,而是使用 HTTP HEAD。如果 HTTP Head 请求的响应在其标头中包含“Location”字段,则unshortenit 会向该位置发出新的 HTTP HEAD 请求。新请求与原始请求隔离,相对 url 不再起作用。

    参考(来自Wikipedia):

    虽然过时的 IETF 标准 RFC 2616 (HTTP 1.1) 需要 用于重定向的完整绝对 URI,最流行的网络 浏览器容忍将相对 URL 作为 位置标头字段。因此,HTTP/1.1 的当前版本 使相对 URL 符合要求

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 2012-07-04
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多