1、Python2中GET和POST请求
Python 2中,字符串默认是ASCII编码,而在Python 3中,默认是Unicode。因此,在Python 2中发送POST请求时,需要特别注意字符串编码,通常使用str.encode('utf-8')
进行编码。urllib
用于编码参数,urllib2
用于发送请求,Python 2中的urllib
和urllib2
没有被统一到一个库中,需要根据需求分别导入。
1)GET请求
#coding=utf-8
import urllib
import urllib2
import sys
reload(sys)
sys.setdefaultencoding('utf8')
word = urllib.urlencode({"wd":"cjavapy"})
url = 'http://www.baidu.com/s' + '?' + word
try:
request = urllib2.Request(url)
##windows中cmd中乱码,可以使用.encode("gbk","ignore")试试
print urllib2.urlopen(request).read().decode('utf-8')
except Exception,e:
print(e)
2)POST请求
#coding=utf-8
import urllib
import urllib2
import sys
reload(sys)
sys.setdefaultencoding('utf8')
formdata = {
'name':'cjavapy'
}
data = urllib.urlencode(formdata)
try:
request = urllib2.Request(url = "http://httpbin.org/post", data=data)
response = urllib2.urlopen(request)
print response.read()
except Exception,e:
print(e)
2、Python3中GET和Post请求
Python 3将urllib
和urllib2
合并为一个库,所以发送GET和POST请求的操作方式有了一些变化。urllib.parse
用于处理URL和编码参数。urllib.request
用于发送请求。Python 3中,POST请求的参数需要先使用urlencode
编码,并且要通过.encode('utf-8')
转换为字节流格式。
1)GET请求
import urllib.request
import urllib.parse
data = urllib.parse.urlencode({'wd':'cjavapy'})
url = 'http://wwww.baidu.com/s?' + data
# url = 'http://www.baidu.com/s?wd=' + urllib.parse.quote('cjavapy')
try:
response = urllib.request.urlopen(url)
print (response.read().decode('utf-8'))
except Exception as e:
print(e)
2)POST请求
import urllib.request
import urllib.parse
data = bytes(urllib.parse.urlencode({'name':'cjavapy'}),encoding='utf8')
# url = 'http://www.baidu.com/s?wd=' + urllib.parse.quote('cjavapy')
try:
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
print (response.read().decode('utf-8'))
except Exception as e:
print(e)
3、推荐使用requests库(适用于Python 2和3)
对于Python 2和Python 3,requests
库是非常流行和易于使用的,它简化了HTTP请求的过程。使用requests
,发送GET和POST请求非常简单。requests
库在Python 2和Python 3中都能使用,并且语法非常简洁。params
用于GET请求,data
用于POST请求。安装requests 库可以使用
pip install requests
。
1)GET 请求
import requests
url = 'http://example.com'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
print(response.text)
2)POST 请求
import requests
url = 'http://example.com'
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=data)
print(response.text)