1、使用requests执行
requests
库在Python 2和Python 3中的用法基本一致,但在响应内容的类型上有细微差别:在Python 3中,response.text
返回 str
类型(Unicode文本),而 response.content
返回 bytes
类型;在Python 2中,response.text
返回 unicode
类型,response.content
则是原始的 str
(即字节串)。这一区别主要源于两种Python版本对字符串的本质处理方式不同。
相关文档:https://2.python-requests.org//zh_CN/latest/user/quickstart.html
import requests
url = 'https://...'
payload = {'key1': 'value1', 'key2': 'value2'}
# GET
r = requests.get(url)
# GET with params in URL
r = requests.get(url, params=payload)
# POST with form-encoded data
r = requests.post(url, data=payload)
# POST with JSON
import json
r = requests.post(url, data=json.dumps(payload))
# Response, status etc
r.text
r.status_code
2、使用urllib2执行
Python 2中常用的 urllib2
模块在Python 3中被拆分为 urllib.request
和 urllib.error
两个模块,用于处理请求和异常。当将Python 2代码迁移到Python 3时,2to3
工具会自动将 import urllib2
转换为相应的 urllib.request
和 urllib.error
导入,以适配新版标准库的结构变更。
相关文档:https://docs.python.org/2/library/urllib2.html
def URLRequest(url, params, method="GET"):
if method == "POST":
return urllib2.Request(url, data=urllib.urlencode(params))
else:
return urllib2.Request(url + "?" + urllib.urlencode(params))
3、使用httplib2执行
httplib2
支持缓存、重定向、压缩等功能,与 requests
相比,httplib2
更轻量但稍显底层,适合需要高级控制的场景。
相关文档:
https://github.com/jcgregorio/httplib2
https://github.com/httplib2/httplib2/wiki/Examples
https://github.com/httplib2/httplib2/wiki/Examples-Python3
1) Python2中执行
#!/usr/bin/env python
import urllib
import httplib2
http = httplib2.Http()
url = 'http://www.example.com/login'
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}
headers = {'Content-type': 'application/x-www-form-urlencoded'}
response, content = http.request(url, 'POST',
headers=headers, body=urllib.urlencode(body))
headers = {'Cookie': response['set-cookie']}
url = 'http://www.example.com/home'
response, content = http.request(url, 'GET', headers=headers)
2) Python3中执行
#!/usr/bin/python3
import urllib.parse
import httplib2
http = httplib2.Http()
url = 'http://www.example.com/login'
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}
headers = {'Content-type': 'application/x-www-form-urlencoded'}
response, content = http.request(url, 'POST',
headers=headers, body=urllib.parse.urlencode(body))
headers = {'Cookie': response['set-cookie']}
url = 'http://www.example.com/home'
response, content = http.request(url, 'GET', headers=headers)
4、Python3使用http.client执行
http.client
是标准库中的低层 HTTP 客户端,适合需要手动构建请求的场景。相比之下,requests
更适合快速开发,而 http.client
更适合底层控制和调试。
相关文档:https://docs.python.org/3/library/http.client.html
#!/usr/bin/env python3
import http.client
import json
print("\n GET example")
conn = http.client.HTTPSConnection("httpbin.org")
conn.request("GET", "/get")
response = conn.getresponse()
data = response.read().decode('utf-8')
print(response.status, response.reason)
print(data)
print("\n POST example")
conn = http.client.HTTPSConnection('httpbin.org')
headers = {'Content-type': 'application/json'}
post_body = {'text': 'testing post'}
json_data = json.dumps(post_body)
conn.request('POST', '/post', json_data, headers)
response = conn.getresponse()
print(response.read().decode())
print(response.status, response.reason)
print("\n PUT example ")
conn = http.client.HTTPSConnection('httpbin.org')
headers = {'Content-type': 'application/json'}
post_body ={'text': 'testing put'}
json_data = json.dumps(post_body)
conn.request('PUT', '/put', json_data, headers)
response = conn.getresponse()
print(response.read().decode(), response.reason)
print(response.status, response.reason)
print("\n delete example")
conn = http.client.HTTPSConnection('httpbin.org')
headers = {'Content-type': 'application/json'}
post_body ={'text': 'testing delete'}
json_data = json.dumps(post_body)
conn.request('DELETE', '/delete', json_data, headers)
response = conn.getresponse()
print(response.read().decode(), response.reason)
print(response.status, response.reason)