首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySocks代理函数可以与praw API一起使用吗?

PySocks代理函数可以与praw API一起使用吗?
EN

Stack Overflow用户
提问于 2019-06-12 17:05:29
回答 1查看 323关注 0票数 2

因此,我获得了一些使用praw API的代码,我希望通过代理运行它们。我在this question下找到了下面的代码,它对我很有效。

代码语言:javascript
复制
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
import urllib2

print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

我的问题是,它是否也会通过代理来传输praw网络?我开始研究praw代码,试图了解它是如何工作的,但它对我来说太复杂了,我无法决定它是否可以工作。你们中有谁有足够的经验告诉我praw是如何联网的,或者socks代理到底是如何工作的,或者可以告诉我如何才能找到答案?

非常感谢你对我的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 03:17:46

这是可以实现的吗?

是。Python使用请求库发出HTTP(S)请求。根据this answerRequests documentation的说法,requests>=2.10.0通过PySocks支持SOCKS代理。

版本兼容性

从这个答案开始,prawcore ( praw所依赖的)需要requests >=2.6.0, <3.0。您可能已经安装了某个至少为2.10.0requests版本,但您可以通过以下方式进行检查:

代码语言:javascript
复制
$ python3 -c 'import requests; print(requests.__version__)'

如果您安装的版本低于2.10.0,请使用以下命令进行升级:

代码语言:javascript
复制
$ python3 -m pip install 'requests >=2.10.0, <3.0'

代理配置

根据链接的答案,我们设置了代理的dict (使用'https'代替'http',因为PRAW的所有请求都是通过HTTPS发生的):

代码语言:javascript
复制
proxies = {'https': 'socks5://127.0.0.1:9050'}

然后,我们必须将其传递给PRAW使用的Session。我们使用proxies argument实例化它

代码语言:javascript
复制
import requests
socks_session = requests.Session(proxies=proxies)

PRAW documentation mentions how to use a custom Session

requestor_classrequestor_kwargs允许定制Reddit将使用的请求者。这允许例如容易地向请求者添加行为或将其Session包装在缓存层中。

下面是我们如何将我们的自定义Session传递给PRAW:

代码语言:javascript
复制
reddit = praw.Reddit(client_id='XX',
                     client_secret='XX',
                     user_agent='my_bot by pythoniac',
                     # ... more kwargs ...
                     requestor_kwargs={'session': socks_session})

PRAW通过请求发出的任何请求都将通过SOCKS代理。

DNS解析

注意Requests documentation在解析SOCKS代理时是怎么说的:

使用方案socks5的DNS会导致在客户端而不是在代理服务器上进行

解析。这与curl是一致的,curl使用该方案来决定是在客户端还是在代理上执行DNS解析。如果要解析代理服务器上的域,请使用socks5h作为方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56558433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档