Python语言内置的urllib2模块也可以发送HTTP请求,但Requests包可以使用更简单的方式来发送GET/POST的HPPT请求。这时需要导入模块,如下所示:

import requests

发送GET请求

一般来说,在大部分浏览器URL网址中输入网址发送的请求都是GET请求,这是向Web服务器获取资源的请求。Requests即调用get()函数来发送GET请求。

发送Baidu网站的GET请求,如下所示:

import requests

r = requests.get("http://www.baidu.com")
print(r.status_code)

上述程序 代码导入requests模块后,调用get()函数发送HTTP请求,参数是URL网址字符串,变量r是响应的response对象。可以使用status_code属性获取请求的状态代码。

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
200

[Done] exited with code=0 in 1.326 seconds

上述运行结果 为200,表示请求成功;如果值是400~599,表示有错误,如404表示网页不存在。

通过if/else条件检查状态代码来判断GET请求是否成功,如下所示:

import requests

r = requests.get("http://www.baidu.com")
if r.status_code == 200:
    print("请求成功...")
else:
    print("请求失败...")

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
请求成功...

[Done] exited with code=0 in 3.979 seconds

URL网址可以传递参数字符串,参数位于问号“?”之后 。如果参数不止一个,则使用“&”符号分隔,如下所示:

上述URL网址传递参数name和score,其值分别为“陈会安”和“95”。发送http://httpbin.org/get(HTTP请求/响应的测试网站)的GET请求,并且加上参数,如下所示:

import requests

url_params = {'name': '陈会安', 'score': 95}
r = requests.get("http://httpbin.org/get", params=url_params)
print(r.url)

上述代码需要建立 字典的参数,键是参数名称,值是参数值,在get()函数的params参数指定url_params变量值,r.url属性可以获取完整URL网址字符串。

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
http://httpbin.org/get?name=%E9%99%88%E4%BC%9A%E5%AE%89&score=95

[Done] exited with code=0 in 1.501 seconds

上述运行结果的URL网址,name参数经过编码。

在http://httpbin.org网站响应的是JSON数据,可以使用text属性输出响应字符串,如下所示:

import requests

data = {'name': '陈会安', 'score': 95}
r = requests.get("http://httpbin.org/get", params=data)
print(r.text)

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
{
  "args": {
    "name": "\u9648\u4f1a\u5b89", 
    "score": "95"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-6305819d-7ea175694ab20fae54a10a49"
  }, 
  "origin": "167.220.255.49", 
  "url": "http://httpbin.org/get?name=\u9648\u4f1a\u5b89&score=95"
}


[Done] exited with code=0 in 7.047 seconds

发送POST请求

Requests包调用get()函数发送GET请求,同时,POST请求调用post()函数。POST请求就是发送窗体,如同URL参数,需要发送表单域的输入数据。

调用post()函数发送http://httpbin.org/post的POST请求,如下所示:

import requests

post_data = {'name': '陈会安', 'score': 95}
r = requests.post("http://httpbin.org/post", data=post_data)
print(r.text)

上述程序代码需要建立字典的发送数据,在post()函数中指定data参数是past_data变量值 ,r.text属性可以输出响应字符串,运行结果如下:

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Ch4_2_2.py"
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "name": "\u9648\u4f1a\u5b89", 
    "score": "95"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "41", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-63058a6a-49ccd218040f0ed05a2ff9a6"
  }, 
  "json": null, 
  "origin": "167.220.255.49", 
  "url": "http://httpbin.org/post"
}


[Done] exited with code=0 in 1.603 seconds

从上述运行结果中可以看到发送的数据。