python 仅使用 urllib2 获取标头

2023-12-19

我必须使用 urllib2 实现一个仅获取标头的函数(不执行 GET 或 POST)。这是我的功能:

def getheadersonly(url, redirections = True):
    if not redirections:
        class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
            def http_error_302(self, req, fp, code, msg, headers):
                return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
            http_error_301 = http_error_303 = http_error_307 = http_error_302
        cookieprocessor = urllib2.HTTPCookieProcessor()
        opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor)
        urllib2.install_opener(opener)

    class HeadRequest(urllib2.Request):
        def get_method(self):
            return "HEAD"

    info = {}
    info['headers'] = dict(urllib2.urlopen(HeadRequest(url)).info()) 
    info['finalurl'] = urllib2.urlopen(HeadRequest(url)).geturl() 
    return info

使用答案中的代码this https://stackoverflow.com/a/2070916/842837 and this https://stackoverflow.com/a/554580/842837。然而这is doing即使标志是重定向False。我尝试使用以下代码:

print getheadersonly("http://ms.com", redirections = False)['finalurl']
print getheadersonly("http://ms.com")['finalurl']

在这两种情况下,它都给予了morganstanley.com。这里有什么问题吗?


首先,您的代码包含几个错误:

  1. 根据每个请求getheadersonly您安装一个新的全局 urlopener,然后在后续调用中使用urllib2.urlopen

  2. 您发出两个 HTTP 请求来获取响应的两个不同属性。

  3. 实施urllib2.HTTPRedirectHandler.http_error_302并不是那么微不足道,我不明白它首先如何防止重定向。

基本上,您应该了解每个处理程序都安装在开启器中以处理某种类型的响应。urllib2.HTTPRedirectHandler是否可以将某些 http 代码转换为重定向。如果您不需要重定向,请勿将重定向处理程序添加到 opener 中。如果您不想打开 ftp 链接,则不要添加FTPHandler, etc.

您所需要的就是创建一个新的开启器并添加urllib2.HTTPHandler()在其中,将请求自定义为“HEAD”请求,并将请求的实例传递给打开器,读取属性,然后关闭响应。

class HeadRequest(urllib2.Request):
    def get_method(self):
        return 'HEAD'

def getheadersonly(url, redirections=True):
    opener = urllib2.OpenerDirector()
    opener.add_handler(urllib2.HTTPHandler())
    opener.add_handler(urllib2.HTTPDefaultErrorHandler())
    if redirections:
        # HTTPErrorProcessor makes HTTPRedirectHandler work
        opener.add_handler(urllib2.HTTPErrorProcessor())
        opener.add_handler(urllib2.HTTPRedirectHandler())
    try:
        res = opener.open(HeadRequest(url))
    except urllib2.HTTPError, res:
        pass
    res.close()
    return dict(code=res.code, headers=res.info(), finalurl=res.geturl())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 仅使用 urllib2 获取标头 的相关文章

随机推荐

  • 在 folium 地图上绘制数据帧中的纬度经度点 - iPython

    我有一个带有纬度 经度坐标的数据框 latlon 51 249443914705175 0 13878830247011467 51 249443914705175 0 13878830247011467 51 24976823997686
  • 避免在继承的 java 类中进行强制转换

    我有一堂课 class MyClass public MyClass getParent public MyClass getChildren 和一个子类 MySubClass extends MyClass public String g
  • android 动态改变样式

    我已经在 styles xml 中描述了对象的属性 不管对象是什么 我想在 styles xml 中动态更改这些属性 有人知道我该怎么做吗 你可以这样做 活动中 this setTheme R style ThemeRed 在 styles
  • 如何在由knitr制作的HTML5幻灯片中使用“R生成”图作为半透明背景?

    我想在 HTML5 幻灯片的第一页添加一个绘图 我可以以动态的方式实现这一点吗 也就是说 背景图像将由 R 代码生成 而不是插入半透明的 PNG 图像 谢谢 Update 我想要的是 您可以使用块选项dev args为了达成这个 您需要正确
  • 什么是语句的不可达端点(unreachable endpoint)?

    受到这个问题的回答的启发 C 中 switch 的空情况是否与下一个非空情况合并 https stackoverflow com questions 15164318 is empty case of switch in c sharp c
  • 使用 wincertstore 的 Python 请求

    我试图通过 requests 包连接到我公司的内部网页 但由于 python 不使用 Windows 默认的受信任证书 因此连接被拒绝 我发现 wincertstore 可用于获取 Windows 默认证书 但我仍然不确定如何将其与我的请求
  • .NET / WPF 中的通用 JSON 解析器?

    我读过很多关于如何使用 DataContractJsonSerializer 将 JSON 对象反序列化为特定对象的教程 但是 我想将我的对象反序列化为由字符串 数组或字典组成的字典 例如当我说 JsonObject Parse myJSO
  • 在Python中分割字符串

    我有一个像这样的字符串 这是 括号测试 和引号测试 我正在尝试用 Python 编写一些内容 将其按空格分开 同时忽略方括号和引号内的空格 我正在寻找的结果是 this is 括号测试 和引号测试 这是一个适用于您的测试输入的简单解决方案
  • 如何在数据库中存储自定义用户字段

    我正在尝试找到一个教程来指导我基于用户的自定义字段如何工作 就像在调查网站中一样 它们允许用户创建自定义字段并存储它们 更重要的是存储通过这些字段输入的数据 我正在寻找一些描述如何在数据库上完成此操作的内容 我在寻找一种方法时遇到了一些麻烦
  • fwrite 对于大量小写入的效率

    我有一个程序可以使用以下命令保存许多 gt 1GB的大文件fwrite它工作得很好 但不幸的是由于每次调用的数据的性质fwrite只写1 4字节 结果 写入可能需要一个多小时 其中大部分时间似乎是由于系统调用开销 或至少在 fwrite 的
  • TextView 椭圆高度明智

    有没有等价的android ellipsize 对于 y 轴上太长的文本 省略 x 轴上太长的文本 我有一个 TextView 它必须是固定高度 但是它里面的文本通常太长 无法全部容纳 我希望它在被切成两半之前停止 我不想设置android
  • Android SearchRecentSuggestions - 在 SearchView 中输入时不会显示建议

    我有一个可用的搜索小部件 并且想要添加搜索历史记录建议 我按照 Android 教程 http developer android com guide topics search adding recent query suggestion
  • 如何为 VSTS 添加 GIT 子模块以与 Visual Studio 2017 一起使用

    如何在 Azure GIT 中创建子模块存储库和我的另一个项目 C MVC 并在 Azure GIT 中使用它或在 Visual Studio 2017 IDE 中引用它 是否有任何视频显示此内容或解释此内容的文档 我没有看到任何东西 尤其
  • 使用factomineR 进行因子分析

    当我在 R 中使用函数 CA 时遇到问题 我的数据是 data row names Conscient NonConscient MoinsSouvent 185 213 PlusieursfMois 98 56 PlusieursfSem
  • “此 HTML5 文档检查接口已弃用”

    在做一个项目时 我正在检查它是否有 W3C 错误 使用HTML 验证器 https addons mozilla org en us firefox addon html validator Firefox 的插件 在此过程中我发现了一个以
  • Java-多边形和线的交点

    有没有什么函数可以给我一个交点Polygon and Line2D 我有一个多边形和一个我知道相交的线段 我想要交点的实际值而不是布尔答案 给你 有趣的方法是 getIntersections 和 getIntersection 前者解析所
  • EF core 5 多对多过滤器

    这是我的查询 public async Task
  • 量角器无法单击 元素内嵌入的

    我有两个嵌入式 span 里面的元素 a 元素 我需要在第二个触发点击事件 span The by id方法上的id我创建的类没有触发点击 我也尝试过by binding但这不起作用 请帮助 代码 div class add player
  • 使用 JavaScript 添加微数据

    我有一个基于 Javascript 和 php 的评级系统 每个页面上都会显示结果 X 票 moyenne X X 是数字 moyenne 表示 平均符号 我想要 javascript 添加微数据信息 源代码应该显示如下内容 span X
  • python 仅使用 urllib2 获取标头

    我必须使用 urllib2 实现一个仅获取标头的函数 不执行 GET 或 POST 这是我的功能 def getheadersonly url redirections True if not redirections class MyHT