Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不下载Python的情况下检查重定向的网页地址_Python_Http_Http Headers_Urllib2_Httplib - Fatal编程技术网

如何在不下载Python的情况下检查重定向的网页地址

如何在不下载Python的情况下检查重定向的网页地址,python,http,http-headers,urllib2,httplib,Python,Http,Http Headers,Urllib2,Httplib,对于给定的url,如何在HTTP重定向后检测最终的internet位置,而不使用python下载最终页面(例如HEAD请求)。我正在尝试编写一个大规模下载程序,我的下载机制需要在下载之前知道页面的互联网位置 编辑 最后我做了这件事,我希望这能帮助其他人。我仍然对其他方法持开放态度 import urlparse import httplib def getFinalUrl(url): "Navigates Through redirections to get final url."

对于给定的url,如何在HTTP重定向后检测最终的internet位置,而不使用python下载最终页面(例如HEAD请求)。我正在尝试编写一个大规模下载程序,我的下载机制需要在下载之前知道页面的互联网位置

编辑 最后我做了这件事,我希望这能帮助其他人。我仍然对其他方法持开放态度

import urlparse
import httplib

def getFinalUrl(url):
    "Navigates Through redirections to get final url."
    parsed = urlparse.urlparse(url)
    conn = httplib.HTTPConnection(parsed.netloc)
    conn.request("HEAD",parsed.path)
    response = conn.getresponse()
    if str(response.status).startswith("3"):
        new_location = [v for k,v in response.getheaders() if k == "location"][0]
        return getFinalUrl(new_location)
    return url

您可以使用发送HEAD请求。

您还可以查看一下,它似乎是HTTP请求的新流行API,取代了可能笨拙的
httplib2
。(见附件)


它还有一个
head()
方法用于此操作。

我强烈建议您使用请求库。它编码良好,并得到积极维护。请求可以生成您需要的任何内容,如预回迁/

从请求文件中:

默认情况下,当您发出请求时,会立即下载响应主体。您可以覆盖此行为并推迟下载响应正文,直到使用prefetch参数访问response.content属性:

tarball_url = 'https://github.com/kennethreitz/requests/tarball/master'
r = requests.get(tarball_url, prefetch=False)
此时,只下载了响应头,连接保持打开状态,因此允许我们有条件地进行内容检索:

if int(r.headers['content-length']) < TOO_LONG:
  content = r.content
  ...
如果int(r.headers['content-length'])<太长:
content=r.content
...

您可以使用
Response.iter\u content
和Response.iter\u line方法,或者从底层urllib3
urllib3.HTTPResponse
at
Response.raw

读取详细的重定向,进一步控制工作流。我需要手动完成吗?现在是
r=requests.get(tarball\u url,stream=True)