【问题标题】:Does the PySocks proxy function work with the praw API?PySocks 代理功能是否与 praw API 一起使用?
【发布时间】:2019-10-26 17:53:36
【问题描述】:

所以我有一些使用 praw API 的代码,我想通过代理运行。我在this question 下找到了以下代码,它对我有用。


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 代理是如何工作的,或者可以告诉我如何找到答案?

非常感谢你帮助我。

【问题讨论】:

    标签: python networking reddit socks praw


    【解决方案1】:

    这可以实现吗?

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


    版本兼容性

    截至此答案,prawcorepraw 取决于)需要requests >=2.6.0, <3.0。您可能安装了至少为2.10.0 的某个版本的requests,但您可以通过以下方式进行检查:

    $ python3 -c 'import requests; print(requests.__version__)'
    

    如果您安装的版本低于2.10.0,请升级:

    $ python3 -m pip install 'requests >=2.10.0, <3.0'
    

    代理配置

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

    proxies = {'https': 'socks5://127.0.0.1:9050'}
    

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

    import requests
    socks_session = requests.Session(proxies=proxies)
    

    PRAW documentation mentions how to use a custom Session:

    requestor_classrequestor_kwargs 允许自定义请求者 Reddit 将使用。例如,这允许轻松向请求者添加行为或将其 Session 包装在缓存层中。

    以下是我们将自定义 Session 传递给 PRAW 的方式:

    reddit = praw.Reddit(client_id='XX',
                         client_secret='XX',
                         user_agent='my_bot by pythoniac',
                         # ... more kwargs ...
                         requestor_kwargs={'session': socks_session})
    

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


    DNS 解析

    请注意Requests documentation 在 DNS 解析方面对 SOCKS 代理的评价:

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

    【讨论】:

    • 很棒的答案!!
    猜你喜欢
    • 2018-05-30
    • 2023-03-14
    • 1970-01-01
    • 2018-08-16
    • 2020-03-06
    • 2018-04-29
    • 2014-02-03
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多