当我们通过 Python 中的 urllib 库向某个网站发送 GET 或 POST 请求时,我们需要在请求头中添加一些自定义信息,例如 User-Agent,Cookies 等,以便对方服务器识别我们的身份或做一些其他限制。在 urllib 的 urllib.request 模块中,我们可以使用 Request 类来构造一个请求对象,并通过 add_header 方法添加任意数量的 HTTP 头部。下面是详细的攻略:
1. 导入 urllib.request 模块
在 Python 3.x 中,我们需要导入 urllib.request 模块来发起网络请求。这个模块提供了一系列的工具类和函数,用于处理 URL 和发送 HTTP 请求。
import urllib.request
2. 构造 Request 对象
首先,我们需要基于 URL 地址构造一个请求对象,使用 Request 类,构造函数的第一个参数是 URL,第二个参数可以包含一些可选参数(如 data,headers 等):
url = "https://www.example.com"
req = urllib.request.Request(url)
3. 添加 HTTP 头部
我们可以使用 add_header 方法向请求中添加任意数量的 HTTP 头部。例如,可以设置 User-Agent 和 Referer 头部:
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
req.add_header("Referer", "https://www.example.com/")
这里的 User-Agent 头部设置了一个 Chrome 浏览器的 User-Agent,可以使对方服务器将我们的请求识别为使用 Chrome 浏览器发出的请求。Referer 头部指定了请求来源,同样可以帮助对方服务器识别我们的来源。
4. 发送请求
最后,我们可以使用 urlopen 函数来发送请求并获取响应。urlopen 函数返回一个响应对象,可以通过 read 方法获取响应内容,也可以通过 getheaders 方法获取响应头部信息。
resp = urllib.request.urlopen(req)
content = resp.read().decode("utf-8")
headers = resp.getheaders()
下面是一个完整的示例:
import urllib.request
url = "http://httpbin.org/get"
req = urllib.request.Request(url)
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
resp = urllib.request.urlopen(req)
content = resp.read().decode("utf-8")
headers = resp.getheaders()
print(content)
print(headers)
这个示例中,我们向 httpbin.org 发送了一个 GET 请求,并设置了 User-Agent 头部。最后输出了响应内容和头部信息。
下面是另一个示例,我们向同一个网站发送一个带有参数的 POST 请求,并设置了 Content-Type 头部,请求体采用 JSON 格式:
import urllib.request
import json
url = "http://httpbin.org/post"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
"Referer": "https://www.example.com/",
"Content-Type": "application/json"
}
data = {
"name": "John",
"age": 30,
"gender": "male"
}
json_data = json.dumps(data).encode("utf-8")
req = urllib.request.Request(url, data=json_data, headers=headers)
resp = urllib.request.urlopen(req)
content = resp.read().decode("utf-8")
headers = resp.getheaders()
print(content)
print(headers)
在这个示例中,我们向 httpbin.org 发送了一个 POST 请求,带有一个 JSON 格式的请求体。我们设置了 User-Agent,Referer 和 Content-Type 三个头部信息。注意,如何用 json.dumps 将数据转换为 JSON 字符串。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python urllib库如何添加headers过程解析 - Python技术站