URL重定向无法正常工作

时间:2014-07-09 13:10:08

标签: python url url-redirection

以下是我使用的代码,

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

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

1 个答案:

答案 0 :(得分: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使用请求,和请求无法理解最后的相对网址

更新

实际上,request lib可以使用request.get方法自动处理http重定向。

e.g。

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头请求的响应在其标头中有一个“位置”字段,则unshortenit向该位置发出新的HTTP HEAD请求。新请求与原始请求隔离,相对网址不再有效。

参考(来自Wikipedia):

  

虽然过时的IETF标准RFC 2616(HTTP 1.1)需要一个   完成重定向的绝对URI ,这是最受欢迎的网络   浏览器容忍传递相对URL作为a的值   位置标题字段。因此,HTTP / 1.1的当前版本   使相对URL符合