利用requests在请求执行前直接返回url

背景:
使用requests时,想自己写一个缓存函数,需要在请求执行前获取完整url。requests传url有两种,一种是完整路径写在url中,另一种是base_url和params分开传,在请求时由requests自行组装。
思路:
通常利用requests获取资源时,想要获得完整url,通常可以在请求响应后,通过实例.url获取。比如:

page = requests.get(base_url, kval_pairs)
print(page.url)

这样的问题是,服务器做了一次请求。但实际上,我的需求并不需要这次请求。所以看了一下源代码,发现requests在获得请求之前,会对url进行一次组装。源代码在models.py文件中的PreparedRequest类下。所以利用如下代码,可以直接获得url。

from requests.models import PreparedRequest
def requestURL(baseurl, params):
    p = PreparedRequest()
    return p.prepare_url(baseurl, params)

测试一下:

# test1
base_url_1 = "https://api.datamuse.com/words?ml=ringing+in+the+ears&sp=b%2A"
kval_pairs_1 = ""
page = requests.get(base_url_1, kval_pairs_1)
print(f"test1: {page.url}")

# test2
base_url_2 = "https://api.datamuse.com/words"
kval_pairs_2 = {"ml":"ringing in the ears", "sp":"b*"}
page = requests.get(base_url_2, kval_pairs_2)
print(f"test2: {page.url}")

输出结果:

test1: https://api.datamuse.com/words?ml=ringing+in+the+ears&sp=b%2A
test2: https://api.datamuse.com/words?ml=ringing+in+the+ears&sp=b%2A

可以把这段代码封装成自己的函数,用来做URL的合成函数,优点就是成熟,可以避免自己写组装url函数带来的一些坑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值