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)