Python语言内置的urllib2模块也可以发送HTTP请求,但Requests包可以使用更简单的方式来发送GET/POST的HPPT请求。这时需要导入模块,如下所示:
import requests
一般来说,在大部分浏览器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网址可以传递参数字符串,参数位于问号“?”之后 。如果参数不止一个,则使用“&”符号分隔,如下所示:
https://httpbin.org/get?name=陈会安&score=95
上述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
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
从上述运行结果中可以看到发送的数据。