理解Python requests会话参数

1 投票
2 回答
2872 浏览
提问于 2025-04-18 12:01

我正在尝试使用Twitter的API,并且使用tweepy这个库来理解API的设计。为了这个讨论,我们来看一下这个API https://dev.twitter.com/docs/api/1.1/get/users/show

一个示例的请求看起来像这样 https://api.twitter.com/1.1/users/show.json?screen_name=rsarver

所以,我不想自己构建一个网址字符串。

我正在深入研究 https://github.com/tweepy/tweepy/blob/master/tweepy/binder.py 里的代码。

更具体一点。

s = requests.Session()

然后是 build_parameters() 这个函数,在这里他们设置了参数……

在代码中,他们并没有明确地构建网址。

execute_code() 中,如果我执行 print full_url,它的结果就是 ( https://api.twitter.com/1.1/users/show.json)

我猜测在 build_parameters 中,self.session.params 是设置变量的地方,然后在第156行是所有操作发生的地方?

resp = self.session.request(self.method, full_url,
                                                data=self.post_data, timeout=self.api.timeout,
                                                auth=auth, proxies=self.api.proxy)

但是为了调试,我真的想知道执行的是什么“字符串网址”。我该如何获取这个“字符串”?或者也许我还没有完全理解代码。

长话短说。

我想向Twitter的API发送请求,但我不想“构建”字符串……而是想使用这个会话参数来处理它,但同时,我最终还是想打印出被“请求”的字符串?

2 个回答

0

我用简单的ctrl-F快捷键找到了full_url是怎么构建的,具体在第113和114行。

url = self.api_root + self.path
full_url = 'https://' + self.host + url

这就是你想要找的内容吗?用同样的方法,你也可以查找self.api_rootself.path是在哪里定义的。

1

你需要的完整网址在你从请求中得到的响应对象里:

resp = self.session.request(self.method, full_url,
                                                data=self.post_data, timeout=self.api.timeout,
                                                auth=auth, proxies=self.api.proxy)
print resp.url # This is the url you want

我不太确定这对你是否真的有帮助。你是想在继续使用tweepy的情况下获取这个网址(而且不想改动tweepy)吗?还是说你只是想通过tweepy了解如何与Twitter的API进行互动?

撰写回答