📜  网络编程Python – HTTP 请求(1)

📅  最后修改于: 2023-12-03 15:27:40.891000             🧑  作者: Mango

网络编程Python – HTTP 请求

在 Python 中,使用 urllib 或者 requests 模块来进行 HTTP 请求。

发送 HTTP GET 请求
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 属性获得响应数据。

发送 HTTP POST 请求
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 参数,传入请求数据即可。

发送 HTTP 请求头
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 参数,传入请求头即可。

发送 HTTP 文件上传请求
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 参数,传入文件字典即可。

发送 HTTP Cookies
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 请求,将会大大增强您的编程能力。