Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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:request.has_头(header)总是返回false_Python_Http_Web_Urllib - Fatal编程技术网

Python:request.has_头(header)总是返回false

Python:request.has_头(header)总是返回false,python,http,web,urllib,Python,Http,Web,Urllib,使用Python3.6中的urllib,我创建了一个请求并对其应用了头。然而,Python似乎完全忽略了该指令,当我运行 req.has_header('Content-Type') 结果是错误的。这也适用于其他标题,除了“连接”。有趣的是,“connection”也返回false。我还没有找到一个好的资源来说明如何准确地在Python中声明一致工作的头文件(Python显然对头文件的名称非常区分大小写),所以如果有人有任何建议,我很想听听 我的相关资料来源是: head = { 'c

使用Python3.6中的urllib,我创建了一个请求并对其应用了头。然而,Python似乎完全忽略了该指令,当我运行

req.has_header('Content-Type')
结果是错误的。这也适用于其他标题,除了“连接”。有趣的是,“connection”也返回false。我还没有找到一个好的资源来说明如何准确地在Python中声明一致工作的头文件(Python显然对头文件的名称非常区分大小写),所以如果有人有任何建议,我很想听听

我的相关资料来源是:

head = {
    'content-type': 'application/x-www-form-urlencoded',
    'connection': 'keep-alive',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}

req = Request(url, post_bytes, head)
print(req.has_header('content-type')
用“内容类型”替换任何其他给定的标题,结果仍然为false。这几乎就像默认的python请求不包含头一样,但是……肯定不是这样吗

谢谢你的洞察力

看看这个:

urllib2.py

def add_header(self, key, val):
    # useful for something like authentication
    self.headers[key.capitalize()] = val
现在,由于设置标题与在每个标题上调用
add_header
是一样的,所以您可以看到发生的情况是urllib将每个键大写。因此,标题正好在以下键下可用:
Content-type

别问我为什么这样做。我不知道。

看看这个:

urllib2.py

def add_header(self, key, val):
    # useful for something like authentication
    self.headers[key.capitalize()] = val
现在,由于设置标题与在每个标题上调用
add_header
是一样的,所以您可以看到发生的情况是urllib将每个键大写。因此,标题正好在以下键下可用:
Content-type

别问我为什么这样做。我不知道。

标题不区分大小写。添加的标题标准化为大写字符串(首字母大写,其余小写),因此对
内容类型的测试有效:

>>> list(req.headers)
['Content-type', 'Connection', 'User-agent']
>>> req.has_header('Content-type')
True
是的,这过于简单,但足以在模块中内部使用标头。

标头不区分大小写。添加的标题标准化为大写字符串(首字母大写,其余小写),因此对
内容类型的测试有效:

>>> list(req.headers)
['Content-type', 'Connection', 'User-agent']
>>> req.has_header('Content-type')
True
是的,这过于简单化了,但对于模块中标题的内部使用已经足够了。

您是否尝试过(注意,“type”是小写的):

如果使用req.header_items(),您可以看到header键的第一个字母(并且只有第一个字母)是大写的。

您是否尝试过(注意“type”是小写的):


如果使用req.header_items(),您可以看到header键的第一个字母(并且只有第一个字母)是大写的。

这是有效的。我没有料到第二个连字符的单词不会像第一个一样大写。通过Firebug查看一些示例标题,可以发现这两个词都是大写的,但对于这个应用程序来说,情况似乎并非如此。你知道当报头也被声明时,区分大小写是否适用吗?e、 当我声明head={'Content-type':..}时?谢谢你的帮助!您声明的标题似乎是由urllib请求对象(而不是Python)转换为标题大小写的。我不确定这是否发生在请求发送到网络之前,但我认为这与服务器无关。这是有效的。我没有料到第二个连字符的单词不会像第一个一样大写。通过Firebug查看一些示例标题,可以发现这两个词都是大写的,但对于这个应用程序来说,情况似乎并非如此。你知道当报头也被声明时,区分大小写是否适用吗?e、 当我声明head={'Content-type':..}时?谢谢你的帮助!您声明的标题似乎是由urllib请求对象(而不是Python)转换为标题大小写的。我不确定它是否发生在请求发送到网络之前,但我认为这与服务器无关。