📅  最后修改于: 2023-12-03 15:27:40.891000             🧑  作者: Mango
在 Python 中,使用 urllib
或者 requests
模块来进行 HTTP 请求。
import urllib.request
response = urllib.request.urlopen('http://www.example.com/')
html = response.read()
print(html)
import requests
response = requests.get('http://www.example.com/')
html = response.text
print(html)
以上两种方式均可发送 HTTP GET 请求,并返回响应数据。
urllib
中的 urlopen
方法会返回一个HTTPResponse
对象,可以通过 read()
方法获得响应数据。
requests
中的 get()
方法会返回一个 Response
对象,可以通过 text
属性获得响应数据。
import urllib.parse
import urllib.request
url = 'http://www.example.com/login'
values = {
'username': 'john@example.com',
'password': 'johndoe'
}
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
print(response.read())
import requests
url = 'http://www.example.com/login'
data = {
'username': 'john@example.com',
'password': 'johndoe'
}
response = requests.post(url, data=data)
print(response.text)
以上两种方式均可发送 HTTP POST 请求,并返回响应数据。
urllib
中的 Request
对象可以用于发送 POST 请求,需要在初始化时传入请求数据,即经过编码的字符串或者字节流。
requests
中的 post()
方法可以接受一个 data
参数,传入请求数据即可。
import urllib.request
url = 'http://www.example.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read()
import requests
url = 'http://www.example.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
response = requests.get(url, headers=headers)
html = response.text
以上两种方式均可发送 HTTP 请求头,并返回响应数据。
urllib
中的 Request
对象可以用于设置请求头,需要将键值对放在一个字典中传入。
requests
中的 get()
或者 post()
方法可以接受一个 headers
参数,传入请求头即可。
import requests
url = 'http://www.example.com/upload'
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)
print(response.text)
以上方式可发送 HTTP 文件上传请求,并返回响应数据。
requests
中的 post()
方法可以接受一个 files
参数,传入文件字典即可。
import http.cookiejar
import urllib.request
# 创建 cookiejar 对象
cj = http.cookiejar.CookieJar()
# 创建 opener 对象,并指定 cookiejar
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
urllib.request.install_opener(opener)
# 发送 HTTP GET 请求
response = urllib.request.urlopen('http://www.example.com/login')
# 输出 cookies
for cookie in cj:
print(cookie.name, cookie.value)
import requests
# 发送 HTTP GET 请求
response = requests.get('http://www.example.com/login', cookies={'username': 'john@example.com'})
# 输出 cookies
print(response.cookies.get_dict())
以上两种方式均可发送 HTTP Cookies,并返回响应数据。
urllib
中的 build_opener()
方法可以创建 opener 对象,HTTPCookieProcessor()
方法可以指定 cookiejar。
requests
中的 get()
或 post()
方法可以接受一个 cookies
参数,传入 cookie 字典即可。
HTTP 请求已经成为了现代网络编程中不可缺少的一部分,如果您会使用 Python 发送 HTTP 请求,将会大大增强您的编程能力。