Python中requests
是一个常用的第三方HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果。
请注意,requests库不是Python标准库的一部分,你需要使用pip命令来安装它:
pip install requests
另外,可以下载本人编写的接口源码配合示例使用:
点击下载压缩包,压缩包内含有接口源码及使用说明,不需要额外安装requests
关于GET请求
GET请求是HTTP协议中的一种请求方法,通常用于从服务器请求数据。
以下是GET请求的特点:
- 数据传输:通过URL传递数据,数据在URL中可见。
- 大小限制:由于URL长度限制,GET请求传输的数据量有限。
- 可读性:因为数据在URL中,所以容易被人阅读。
- 幂等性:相同的GET请求被执行多次,结果相同,不会改变服务器状态。
- 安全性:由于数据在URL中可见,不适合传输敏感信息。
GET请求通常不包含请求体,GET请求发送数据只会使用到params
参数(或者直接把参数拼到URL里),也不需要指定Content-Type
。
一个典型的GET请求的URL可能包含查询字符串,格式如下:
http://www.example.com/?param1=value1¶m2=value2
# 这里,param1和param2是请求参数,value1和value2是对应的值。
requests.get()的标准用法
requests.get()
的标准用法比较简单,基本用法如下:
requests.get(url,params=None,headers=None,cookies,auth,timeout,allow_redirects=True,proxies,hooks,stream=True,verify=True,cert)
url参数
必选参数,一个字符串,表示请求的目标URL。可以直接把参数拼到URL里。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url1 = 'http://127.0.0.1:5000/Url/' # 不带参数
url2 = 'http://127.0.0.1:5000/Url/?data1=1&data2=2' # 带参数
# 请求url1
response = requests.get(url1)
# 打印请求url1的响应的状态码和内容
print('url1请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
# 请求url2
response = requests.get(url2)
# 打印请求url2的响应的状态码和内容
print('url2请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
运行结果
url1请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":{"Content-type":null},"method":"GET"}
url2请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":{"Content-type":null,"args":{"data1":"1","data2":"2"}},"method":"GET"}
请求后,返回特定的信息。
params参数
默认为None,可选参数,值为字典。等同于直接把参数拼在url里。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Params/'
# 发送GET请求
response = requests.get(url, params={'data1': 123, 'data2': 456})
# 打印GET请求的响应的状态码和内容
print('GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
运行结果
GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":{"Content-type":null,"args":{"data1":"123","data2":"456"}},"method":"GET"}
请求后,返回的信息中包含请求的params参数:"args":{"123":"123","456":"456"}
。
headers参数
默认为None,可选参数,值是一个字典。可以在此参数中定义一些头信息,比如User-Agent、Authorization 等。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Headers/'
headers = {
'Authorization': '2ORwEtJj79', # 该接口会鉴权,非 '2ORwEtJj79' 会鉴权失败
'User-Agent': 'MyApp/1.0',
'Accept': 'application/json'
}
# 发送GET请求,不指定headers
response = requests.get(url)
# 打印不指定headers的GET请求的响应的状态码和内容
print('不指定headers的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
# 发送GET请求,指定headers
response = requests.get(url, headers=headers)
# 打印指定headers的GET请求的响应的状态码和内容
print('指定headers的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
运行结果
不指定headers的GET请求响应的状态码和内容:
401
{"blog address":"www.jzy-blogs.cn","headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"keep-alive","Host":"127.0.0.1:5000","User-Agent":"python-requests/2.32.3"},"message":{"Authorization":"Authentication Failed!"},"method":"GET"}
指定headers的GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","headers":{"Accept":"application/json","Accept-Encoding":"gzip, deflate","Authorization":"2ORwEtJj79","Connection":"keep-alive","Host":"127.0.0.1:5000","User-Agent":"MyApp/1.0"},"message":{"Authorization":"Authentication successful!"},"method":"GET"}
可以根据需要定义请求头信息中的内容。
cookies参数
无默认值,可选参数,值是一个字典。cookies用于保持用户状态。GET、POST、PUT和DELETE等请求方式的用法是一样的。
import requests
# 定义请求的 URL
url = 'http://127.0.0.1:5000/Cookies/'
# 假设定义的cookies是服务器设置的cookies
cookies = {
'session_id': '9256304856', # 非 '9256304856' 会鉴权失败
'visit_time': '2024-05-23'
}
# 发送GET请求
response = requests.get(url)
# 打印GET请求响应的状态码、内容和Cookies
print('GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
print(response.cookies)
# 发送 GET 请求并传递 cookies 参数
response = requests.get(url, cookies=cookies)
# 打印传递 cookies 参数的GET请求响应的状态码、内容和Cookies
print('传递 cookies 参数的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
print(response.cookies)
运行结果
GET请求响应的状态码和内容:
401
{"blog address":"www.jzy-blogs.cn","message":"Failed!"}
<RequestsCookieJar[]>
传递 cookies 参数的GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":"Successful!"}
<RequestsCookieJar[<Cookie session_id=jVX45bQZ0W for 127.0.0.1/>, <Cookie visit_time=2024-09-12 for 127.0.0.1/>]>
请求后,返回更新后的cookies。
还可以使用Session对象管理Cookies:
import requests
# 定义请求的 URL
url = 'http://127.0.0.1:5000/Cookies/'
# 假设定义的cookies是服务器设置的cookies
cookies = {
'session_id': '9256304856', # 非 '9256304856' 会鉴权失败
'visit_time': '2024-05-23'
}
# 创建一个Session对象
session = requests.Session()
# 发送GET请求,同时指定cookies
response = session.get(url, cookies=cookies)
# 打印Session对象管理的首次的GET请求响应的状态码、内容和Cookies
print('Session对象管理的首次的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
print(response.cookies)
# 再次发送请求,不需要再次指定cookies,因为它们已经被Session管理
response = session.get(url)
# 打印Session对象管理的二次的GET请求响应的状态码、内容和Cookies
print('Session对象管理的二次的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
print(response.cookies)
运行结果
Session对象管理的首次的GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":"Successful!"}
<RequestsCookieJar[<Cookie session_id=jVX45bQZ0W for 127.0.0.1/>, <Cookie visit_time=2024-09-12 for 127.0.0.1/>]>
Session对象管理的二次的GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":"Successful!"}
<RequestsCookieJar[<Cookie session_id=9256304856 for 127.0.0.1/>, <Cookie visit_time=2024-09-12 for 127.0.0.1/>]>
在多个请求之间保持cookies,如果不使用这种方法,需要每次指定cookies=response.cookies
。
auth参数
无默认值,可选参数,值是一个一个元组,包含两个元素,第一个是用户名(username),第二个是密码(password)。这个元组会被用来进行 HTTP 基本认证或摘要认证。但安全性较低,服务端基本上只用于代码开发阶段。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Auth/'
# 定义认证信息,非下方信息会认证失败
auth = ('JZY', 'uhg45dsg')
# 发送GET请求
response = requests.get(url, auth=auth)
# 打印GET请求的响应的状态码和内容
print('GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
运行结果
GET请求响应的状态码和内容:
200
{"blog address":"www.jzy-blogs.cn","message":"Authentication successful","method":"GET"}
请求后,返回信息的message中显示通过认证。
timeout参数
一个可选参数,可以是浮点数或元组。它指定了等待服务器响应的时间(以秒为单位)。如果超过这个时间,请求将被中断,并抛出一个 requests.exceptions.Timeout 异常,它可以帮助避免程序无限期地等待服务器响应。如果 timeout 是一个浮点数,它表示连接和读取的总超时时间。如果 timeout 是一个元组,它应该包含两个数值,分别指定连接和读取的超时时间。例如,(连接超时, 读取超时)。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Timeout/'
# 发送GET请求, 并设置超时时间
try:
# 如果服务器5秒内没有响应(服务器响应时间为7秒),就会抛出错误
response = requests.get(url, timeout=5)
# 打印GET请求的响应的状态码和内容
print('GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
except requests.exceptions.Timeout:
print('GET请求超时')
运行结果
GET请求超时
请求后,由于服务器的响应时间超过5秒,requests抛出异常。
allow_redirects参数
一个可选参数,默认为 True。当设置为 True(默认值)时,requests 会自动处理服务器返回的所有重定向(如 301、302、303、307 和 308 状态码)。当设置为 False 时,requests 不会自动处理重定向,而是将重定向响应返回给用户。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Redirection/'
# 发送GET请求,并自动重定向
response = requests.get(url)
# 打印GET请求的响应的状态码和内容
print('自动重定向的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
# 发送GET请求,非自动重定向
response = requests.get(url, allow_redirects=False)
# 打印GET请求的响应的状态码和内容
print('非自动重定向的GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
运行结果
自动重定向的GET请求响应的状态码和内容:
200
Welcome to the Page!
非自动重定向的GET请求响应的状态码和内容:
302
<!doctype html>
<html lang=en>
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to the target URL: <a href="/Page/">/Page/</a>. If not, click the link.
不确定重定向的地址时,可以设置allow_redirects=False
先确定重定向的地址,再决定是否访问。
proxies参数
一个可选参数,它应该是一个字典,其中键是协议(如 http、https),值是代理服务器的 URL。用于需要代理服务场景,比如翻墙使用谷歌。
import requests
# 定义请求的URL。该地址是谷歌搜索请求.
url = 'https://www.google.com/?hl=zh_CN'
# 设置 SOCKS 代理,请注意该代理仅本人本地代理,不可用于他人。使用时需设置可用代理。
proxies = {
'http': 'socks5://127.0.0.1:10808',
'https': 'socks5://127.0.0.1:10808',
}
# 使用代理发送请求
response = requests.get(url, proxies=proxies)
# 打印GET请求的响应的状态码和内容
print('GET请求响应的状态码和内容:')
print(response.status_code)
print(response.text)
GET请求响应的状态码和内容:
200
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="zh-CN"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){var _g={kEI:'O4LZZtC5I7_LkPIP6bqZqAE',kEXPI:'0,3700299,1082,51,507053,31560,2872,2891,8348,64702,217969,1758,6700,41948,57734,2,2,1,26632,8155,8861,14489,22436,9779,62658,76208,15816,356,1448,26408,20674,342,1292,29277,5239758,997,140,7,3,139,5991145,935,10281262,19357858,1182080,14298,2375,43886,3,318,4,1281,3,2124363,23029351,11557,1242,24511,2,75968,22622,15165,8181,154,17722,31554,1956,19716,6752,155,1,1,1,2481,13503,7737,9138,4600,328,3217,4,1238,1766,1116,6470,5,12082,410,518,7389,5633,687,929,5663,3,79,1122,3,1,52,24,2938,2695,4479,1892,9975,682,452,207,6186,7522,2212,2,9,4284,4283,3501,1342,2377,567,917,981,307,221,6760,2086,1149,2192,4,251,1372,264,10435,2,492,797,2388,5231,1058,2,2082,565,710,59,555,11,499,892,1,1018,2,1067,156,1,573,2,77,9713,94,786,1179,1471,764,2,1008,4,3,3345,158,177,439,120,779,3,67,497,1472,1042,254,2,1933,465,300,616,372,26,1124,1,705,183,3,2,116,4,895,113,1182,220,1444,82,124,19,211,4,702,695,222,33,118,393,349,108,16,3,197,326,158,1971,4,3,1392,59,41,243,1,560,347,775,2,4,3,156,443,6,490,3,25,56,2429,21,422,147,954,969,219,1,458,2312,2,237,405,191,118,311,363,355,5,206,380,53,1922,1309,540,1,8,1,1,4,1,4,240,149,502,161,47,61,467,234,514,146,3,1631,169,591,2763,1482,2,542,1495,21467641,4294,3,1423,3,14475,3,7053,1112,47,8785,18,829',kBL:'Hin6',kOPI:89978449};(function(){var a;((a=window.google)==null?0:a.stvsc)?google.kEI=_g.kEI:window.google=_g;}).call(this);})();(function(){google.sn='webhp';google.kHL='zh-CN';})();(function(){
var h=this||self;function l(){return window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null};var m,n=[];function p(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||m}function q(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a=a.parentNode;return b}function r(a){/^http:/i.test(a)&&window.location.protocol==="https:"&&(google.ml&&google.ml(Error("a"),!1,{src:a,glmm:1}),a="");return a}
function t(a,b,c,d,k){var e="";b.search("&ei=")===-1&&(e="&ei="+p(d),b.search("&lei=")===-1&&(d=q(d))&&(e+="&lei="+d));d="";var g=b.search("&cshid=")===-1&&a!=="slh",f=[];f.push(["zx",Date.now().toString()]);h._cshid&&g&&f.push(["cshid",h._cshid]);c=c();c!=null&&f.push(["opi",c.toString()]);for(c=0;c<f.length;c++){if(c===0||c>0)d+="&";d+=f[c][0]+"="+f[c][1]}return"/"+(k||"gen_204")+"?atyp=i&ct="+String(a)+"&cad="+(b+e+d)};m=google.kEI;google.getEI=p;google.getLEI=q;google.ml=function(){return null};google.log=function(a,b,c,d,k,e){e=e===void 0?l:e;c||(c=t(a,b,e,d,k));if(c=r(c)){a=new Image;var g=n.length;n[g]=a;a.onerror=a.onload=a.onabort=function(){delete n[g]};a.src=c}};google.logUrl=function(a,b){b=b===void 0?l:b;return t("",a,b)};}).call(this);(function(){google.y={};google.sy=[];var d;(d=google).x||(d.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1});var e;(e=google).sx||(e.sx=function(a){google.sy.push(a)});google.lm=[];var f;(f=google).plm||(f.plm=function(a){google.lm.push.apply(google.lm,a)});google.lq=[];var g;(g=google).load||(g.load=function(a,b,c){google.lq.push([[a],b,c])});var h;(h=google).loadAll||(h.loadAll=function(a,b){google.lq.push([a,b])});google.bx=!1;var k;(k=google).lx||(k.lx=function(){});var l=[],m;(m=google).fce||(m.fce=function(a,b,c,n){l.push([a,b,c,n])});google.qce=l;}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a=c==="1"||c==="q"&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if(a.tagName==="A"){a=a.getAttribute("data-nohref")==="1";break a}a=!1}a&&b.preventDefault()},!0);}).call(this);</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#1967d2}em{color:#c5221f;font-style:normal;font-weight:normal}a em{text-decoration:underline}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#681da8;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#1967d2}a:visited{color:#681da8}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#f8f9fa;border:solid 1px;border-color:#dadce0 #70757a #70757a #dadce0;height:30px}.lsbb{display:block}#WqQANb a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;color:#000;border:none;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#dadce0}.lst:focus{outline:none}</style><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){window.google.erd={jsr:1,bv:2072,de:true};
var g=this||self;var k,l=(k=g.mei)!=null?k:1,n,p=(n=g.sdo)!=null?n:!0,q=0,r,t=google.erd,v=t.jsr;google.ml=function(a,b,d,m,e){e=e===void 0?2:e;b&&(r=a&&a.message);d===void 0&&(d={});d.cad="ple_"+google.ple+".aple_"+google.aple;if(google.dl)return google.dl(a,e,d,!0),null;b=d;if(v<0){window.console&&console.error(a,b);if(v===-2)throw a;b=!1}else b=!a||!a.message||a.message==="Error loading script"||q>=l&&!m?!1:!0;if(!b)return null;q++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(t.jsr)+
"&bver="+b(t.bv);t.dpf&&(c+="&dpf="+b(t.dpf));var f=a.lineNumber;f!==void 0&&(c+="&line="+f);var h=a.fileName;h&&(h.indexOf("-extension:/")>0&&(e=3),c+="&script="+b(h),f&&h===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script found.")));google.ple&&google.ple===1&&(e=2);c+="&jsel="+e;for(var u in d)c+="&",c+=b(u),c+="=",c+=b(d[u]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");c.length>=12288&&(c=c.substr(0,12288));a=c;m||google.log(0,"",a);return a};window.onerror=function(a,b,d,m,e){r!==a&&(a=e instanceof Error?e:Error(a),d===void 0||"lineNumber"in a||(a.lineNumber=d),b===void 0||"fileName"in a||(a.fileName=b),google.ml(a,!1,void 0,!1,a.name==="SyntaxError"||a.message.substring(0,11)==="SyntaxError"||a.message.indexOf("Script error")!==-1?3:0));r=null;p&&q>=l&&(window.onerror=null)};})();</script></head><body bgcolor="#fff"><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"><div id=gbar><nobr><b class=gb1>搜索</b> <a class=gb1 href="https://www.google.com/imghp?hl=zh-CN&tab=wi">图片</a> <a class=gb1 href="https://maps.google.com/maps?hl=zh-CN&tab=wl">地图</a> <a class=gb1 href="https://play.google.com/?hl=zh-CN&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/?tab=wn">新闻</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">云端硬盘</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/zh-CN/about/products?tab=wh"><u>更多</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=zh-CN" class=gb4>网络历史记录</a> | <a href="/preferences?hl=zh-CN" class=gb4>设置</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=zh-CN&passive=true&continue=https://www.google.com/%3Fhl%3Dzh_CN&ec=GAZAAQ" class=gb4>登录</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><center><br clear="all" id="lgpd"><div id="XjhHGf"><img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%"> </td><td align="center" nowrap=""><input name="ie" value="GB2312" type="hidden"><input value="zh-CN" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Google 搜索" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google 搜索" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid_1" value=" 手气不错 " name="btnI" type="submit"><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){var id='tsuid_1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AL9hbdgAAAAAZtmQS_iaZMtBgCOSBjs7ppUl5Y4sqkE2" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=zh-CN&authuser=0">高级搜索</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){var a,b="1";if(document&&document.getElementById)if(typeof XMLHttpRequest!="undefined")b="2";else if(typeof ActiveXObject!="undefined"){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if(a=="2"&&location.search.indexOf("&gbv=2")==-1){var f=google.gbvu,g=document.getElementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div style="font-size:83%;min-height:3.5em"><br><div id="gws-output-pages-elements-homepage_additional_languages__als"><style>#gws-output-pages-elements-homepage_additional_languages__als{font-size:small;margin-bottom:24px}#SIvCob{color:#474747;display:inline-block;line-height:28px;}#SIvCob a{padding:0 3px;}.H6sW5{display:inline-block;margin:0 2px;white-space:nowrap}.z4hgWe{display:inline-block;margin:0 2px}</style><div id="SIvCob">Google 提供: <a href="https://www.google.com/setprefs?sig=0_5bk8TVXJCV2PIfI1ZMCrBb-71Mw%3D&hl=en&source=homepage&sa=X&ved=0ahUKEwiQw8bbxquIAxW_JUQIHWldBhUQ2ZgBCAY">English</a> </div></div></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="WqQANb"><a href="/intl/zh-CN/ads/">广告</a><a href="/intl/zh-CN/about.html">关于 Google</a><a href="https://www.google.com/setprefs?sig=0_5bk8TVXJCV2PIfI1ZMCrBb-71Mw%3D&hl=en" id="fehl">Google.com in English</a></div></div><p style="font-size:8pt;color:#70757a">© 2024 - <a href="/intl/zh-CN/policies/privacy/">隐私权</a> - <a href="/intl/zh-CN/policies/terms/">条款</a></p></span></center><script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){window.google.cdo={height:757,width:1440};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d=c.compatMode=="CSS1Compat"?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}
if(a&&b&&(a!=google.cdo.width||b!=google.cdo.height)){var e=google,f=e.log,g="/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI,h="",k=[],l=window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null;l!=null&&k.push(["opi",l.toString()]);for(var m=0;m<k.length;m++){if(m===0||m>0)h+="&";h+=k[m][0]+"="+k[m][1]}f.call(e,"","",g+h)};}).call(this);})();</script> <script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){google.xjs={basecomb:'/xjs/_/js/k\x3dxjs.hp.en.rqPmZWxLCl0.O/ck\x3dxjs.hp.ZfKMbKXi3Nk.L.X.O/am\x3dAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAAAAAAAgAAwA4AAAABAAICAAAAAAAA8AAAAAAAAIQAgAQAFAgADgQHxHACAAFgEA4AU/d\x3d1/ed\x3d1/dg\x3d0/ujg\x3d1/rs\x3dACT90oE_6GieclD7G4RNfDQH-K15rhOFGA',basecss:'/xjs/_/ss/k\x3dxjs.hp.ZfKMbKXi3Nk.L.X.O/am\x3dAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAABAAICAAAAAAAAAAAAAAAAAIQAgAQAFAgA/rs\x3dACT90oGbTyqo-AdSLdgNW2aNnSvg_vL_dA',basejs:'/xjs/_/js/k\x3dxjs.hp.en.rqPmZWxLCl0.O/am\x3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAwA4AAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAADgQHxHACAAFgEA4AU/dg\x3d0/rs\x3dACT90oGhUTk33fx-5vlF4e1g3XaxdIu5jw',excm:[]};})();</script> <link href="/xjs/_/ss/k=xjs.hp.ZfKMbKXi3Nk.L.X.O/am=AQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAABAAICAAAAAAAAAAAAAAAAAIQAgAQAFAgA/d=1/ed=1/rs=ACT90oGbTyqo-AdSLdgNW2aNnSvg_vL_dA/m=sb_he,d" rel="stylesheet" nonce="mtesPSDDM9UhtBNlGMoteA"> <script nonce="mtesPSDDM9UhtBNlGMoteA">(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.rqPmZWxLCl0.O/am\x3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAwA4AAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAADgQHxHACAAFgEA4AU/d\x3d1/ed\x3d1/dg\x3d3/rs\x3dACT90oGhUTk33fx-5vlF4e1g3XaxdIu5jw/m\x3dsb_he,d';var st=1;var amd=1000;var mmd=0;var pod=true;
var f=this||self,g=function(a){return a};function h(){var a,b,c;return(a=(b=window.google)==null?void 0:(c=b.ia)==null?void 0:c.r.B2Jtyd)&&a.m===1&&a.cbfd!=null&&a.cbvi!=null?a:void 0};var k;var l={},m=function(a){this.g=a};m.prototype.toString=function(){return this.g+""};var n=function(a){return a instanceof m&&a.constructor===m?a.g:"type_error:TrustedResourceUrl"};
var p=/^\s*(?!javascript:)(?:[\w+.-]+:|[^:/?#]*(?:[/?#]|$))/i;var q="alternate author bookmark canonical cite help icon license modulepreload next prefetch dns-prefetch prerender preconnect preload prev search subresource".split(" ");function r(a,b){a.src=n(b);var c,d;(c=(b=(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)==null?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",c)};var t=function(a){var b=document;a=String(a);b.contentType==="application/xhtml+xml"&&(a=a.toLowerCase());return b.createElement(a)};function w(a){a=a===null?"null":a===void 0?"undefined":a;if(k===void 0){var b=null;var c=f.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:g,createScript:g,createScriptURL:g})}catch(d){f.console&&f.console.error(d.message)}k=b}else k=b}a=(b=k)?b.createScriptURL(a):a;return new m(a,l)};google.ps===void 0&&(google.ps=[]);function x(){var a=u,b=function(){};google.lx=google.stvsc?b:function(){y(a);google.lx=b};google.bx||google.lx()}function z(a,b){b&&r(a,w(b));var c=a.onload;a.onload=function(d){c&&c(d);google.ps=google.ps.filter(function(e){return a!==e})};google.ps.push(a);document.body.appendChild(a)}google.as=z;function y(a){google.timers&&google.timers.load&&google.tick&&google.tick("load","xjsls");var b=t("SCRIPT");b.onerror=function(){google.ple=1};b.onload=function(){google.ple=0};google.xjsus=void 0;z(b,a);google.aple=-1;google.dp=!0}
function A(){var a=[u];if(!google.dp){for(var b=0;b<a.length;b++){var c=t("LINK"),d=c,e=w(a[b]);if(e instanceof m)d.href=n(e).toString(),d.rel="preload";else{if(q.indexOf("preload")===-1)throw Error("a`preload");e=p.test(e)?e:void 0;e!==void 0&&(d.href=e,d.rel="preload")}c.setAttribute("as","script");document.body.appendChild(c)}google.dp=!0}};function B(a){var b=a.getAttribute("jscontroller");return(b==="UBXHI"||b==="R3fhkb"||b==="TSZEqd")&&a.hasAttribute("data-src")}function C(){for(var a=document.getElementsByTagName("img"),b=0,c=a.length;b<c;b++){var d=a[b];if(d.hasAttribute("data-lzy_")&&Number(d.getAttribute("data-atf"))&1&&!B(d))return!0}return!1}for(var D=document.getElementsByTagName("img"),E=0,F=D.length;E<F;++E){var G=D[E];Number(G.getAttribute("data-atf"))&1&&B(G)&&(G.src=G.getAttribute("data-src"))};var H,I,J,K,L,M;function N(){google.xjsu=u;f._F_jsUrl=u;L=function(){x()};H=!1;I=(st===1||st===3)&&!!google.caft&&!C();J=h();K=(st===2||st===3)&&(!!google.rairicb||!!J)&&!C();M=pod}function O(){H||I||K||(L(),H=!0)}
setTimeout(function(){google&&google.tick&&google.timers&&google.timers.load&&google.tick("load","xjspls");N();if(I||K){if(I){var a=function(){I=!1;O()};google.caft(a);window.setTimeout(a,amd)}K&&(a=function(){K=!1;O()},J?J.cbvi.push(a):(0,google.rairicb)(a),window.setTimeout(a,mmd));M&&(H||A())}else L()},0);})();window._ = window._ || {};window._DumpException = _._DumpException = function(e){throw e;};window._s = window._s || {};_s._DumpException = _._DumpException;window._qs = window._qs || {};_qs._DumpException = _._DumpException;(function(){var t=[1,64,0,0,0,0,8683520,0,2263392,59113522,83886088,526336,1181696,60,0,135170,5259584,822312962,33555575,17796,1504];window._F_toggles = window._xjs_toggles = t;})();window._F_installCss = window._F_installCss || function(css){};(function(){google.jl={bfl:0,dw:false,ine:false,ubm:false,uwp:true,vs:false};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x22agen\x22:false,\x22cgen\x22:false,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22ds\x22:\x22\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22jsonp\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22\\u6e05\\u9664\\u641c\\u7d22\x22,\x22dym\x22:\x22\\u60a8\\u662f\\u4e0d\\u662f\\u8981\\u627e\\uff1a\x22,\x22lcky\x22:\x22\\u0026nbsp;\\u624b\\u6c14\\u4e0d\\u9519\\u0026nbsp;\x22,\x22lml\x22:\x22\\u4e86\\u89e3\\u8be6\\u60c5\x22,\x22psrc\x22:\x22\\u8be5\\u641c\\u7d22\\u8bb0\\u5f55\\u5df2\\u4ece\\u60a8\\u7684\\u003Ca href\x3d\\\x22/history\\\x22\\u003E\\u7f51\\u7edc\\u5386\\u53f2\\u8bb0\\u5f55\\u003C/a\\u003E\\u4e2d\\u79fb\\u9664\x22,\x22psrl\x22:\x22\\u5220\\u9664\x22,\x22sbit\x22:\x22\\u6309\\u56fe\\u7247\\u641c\\u7d22\x22,\x22srch\x22:\x22Google \\u641c\\u7d22\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22rfs\x22:[],\x22stok\x22:\x22F5JeDFKFw55dAmgzmVdOr8Rztlg\x22}}';google.pmc=JSON.parse(pmc);})();(function(){var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};
var e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],l==null){h=null;break a}h=l}var p=h&&h[610401301];g=p!=null?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c){return(c=c.brand)&&c.indexOf(a)!=-1}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return c.indexOf(a)!=-1};function v(){return g?!!q&&q.brands.length>0:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u("Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){return u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.dataset))return null;a=a.dataset.ved;return a===void 0?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m=typeof Symbol!="undefined"&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if(typeof d.length=="number")d={next:b(d)};else throw Error("b`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=E.length>=4)c=(E[E.length-1]-E[E.length-4])/1E3<5;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=(C=a.closest("[jsname]"))==null?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&tgtved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);</script></body></html>
谷歌的服务器无法使用国内IP访问,只能通过代理去访问。
hooks参数
一个可选参数,它是一个字典,其中的键只能是response,值是与该事件相关联的可调用对象(即函数)列表,使获得响应后执行额外操作。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Url/'
# 定义响应后触发的钩子函数
def response_hook_code(response, *args, **kwargs):
print("Status Code:", response.status_code)
return response # 确保返回响应对象
def response_hook_text(response, *args, **kwargs):
print("Status text:", response.text)
return response # 确保返回响应对象
# 发送 GET 请求并设置钩子
requests.get(url, hooks={'response': [response_hook_code, response_hook_text]})
运行结果
Status Code: 200
Status text: {"blog address":"www.jzy-blogs.cn","message":{},"method":"GET"}
获得响应后,成功调用了response_hook_code()和response_hook_text()
打印code和text。不仅如此,还可以自定义各种功能的函数通过hooks参数实现各种操作,比如验证响应参数是否符合需求。
stream参数
一个可选参数,默认为 False。当设置为 False(默认值)时,requests 会立即下载响应内容,并将数据加载到内存中。当设置为 True 时,requests 会延迟下载响应内容,直到你调用 response.iter_content() 或 response.content 时将响应内容逐步地(流式地)获取。这在下载大文件或读取实时数据时非常有用,防止内存占用过大。
import requests
# 定义请求的URL。该地址是部署在本地的接口地址,读者可以下载源码使用
url = 'http://127.0.0.1:5000/Url/'
# 发送GET请求,响应流在 with 代码块结束时自动关闭
print('GET请求的响应流')
with requests.get(url, stream=True) as response:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
print(chunk)
运行结果
GET请求的响应流
b'{"blog address":"www.jzy-blogs.cn","message":{"Content-type":null},"method":"GET"}\n'
就不准备大文件或者实时视频流进行演示了,太麻烦!知道怎么使用这个参数就好。
verify参数
`一个可选参数,默认为 True。当设置为 True(默认值)时,requests 发起HTTPS请求时,会验证服务器的 SSL 证书。如果证书无效或过期,请求将抛出一个 SSLError 异常。当设置为 False 时,requests 不会验证 SSL 证书。这通常不推荐,因为它会使你的请求容易受到中间人攻击(MITM)。
import requests
# 定义请求的URL,该地址不支持POST请求
url = 'https://www.jzy-blogs.cn/'
# 发送GET请求
response = requests.get(url, verify=True)
print('GET请求状态')
print(response.status_code)
运行结果
GET请求状态
200
找不到一个 SSL 证书无效或过期的网站,知道怎么使用就好。
cert参数
一个可选参数,可以是单个文件的路径(包含密钥和证书)或者一个元组,包含两个文件路径(一个为密钥,一个为证书)。这个参数用于客户端 SSL 认证,使用 cert 参数可以确保你的请求在客户端进行 SSL 认证,这对于需要额外安全层的 API 调用非常有用。
import requests
# 定义请求的 URL
url = 'https://example.com/api'
# 定义客户端证书的路径
cert_file = '/path/to/client_cert.pem'
# 发送 POST 请求并提供客户端证书
response = requests.get(url, cert=cert_file)
# 打印响应的状态码和内容
print(response.status_code)
print(response.text)
不想写麻烦的服务,知道怎么调就可以了。
一些补充
本篇示例中的headers、cookies、auth、timeout、allow_redirects、proxies、hooks、stream、verify、cert
,这些参数也是post()、put()、delete()
方法常用的参数,用法都是一样的。
还有就是post()、put()、delete()
方法也可以使用params参数
及url中带参,只是基本上不会发生这种场景。因为没有那个接口会这样奇葩。
在测试接口时,怎么调用并不取决于我们。在调试阶段我们要参考接口文档或者询问开发人员来决定调用时使用哪些参数,因为后端怎样解析请求参数,我们就需要怎么发送请求参数,是一对一的关系。
其实只是简单的请求接口,还是Jmeter比较方便(参数化及并发也方便)。使用python更多还是用于自动化测试,而学会使用requests库发送请求就是征途的第一步。
© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0
...