以下是我使用的代码,
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
如果我在浏览器中使用相同的网址,它会正确地重定向到实际的网址。知道为什么它不起作用吗?
答案 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符合