Python 2 使用urllib和urllib2,或者考虑使用更现代的requests库。Python 3 建议使用urllib库进行GET和POST请求,或者使用requests库来简化操作。Python 2和Python 3中提交GET和POST请求的方式有所不同,主要体现在库的使用和编码方面。本文主要介绍Python中,Python2和Python3发送提交Get和Post请求的方法及示例代码,包括请求中出现异常的处理(try except)。

1、Python2中GET和POST请求

Python 2中,字符串默认是ASCII编码,而在Python 3中,默认是Unicode。因此,在Python 2中发送POST请求时,需要特别注意字符串编码,通常使用str.encode('utf-8')进行编码。urllib用于编码参数,urllib2用于发送请求,Python 2中的urlliburllib2没有被统一到一个库中,需要根据需求分别导入。

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将urlliburllib2合并为一个库,所以发送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)

推荐文档