【发布时间】:2019-07-21 16:13:15
【问题描述】:
我正在尝试在 pythonanywhere 上使用 praw 将图像本地上传到 reddit。
praw.models.Subreddit.submit_image(title, image_path)
这在我的计算机上运行良好,但在 pythonanywhere 上会引发 403 错误。 (图片仍然会被上传。)
我看到on pythonanywhere's website 403 错误是由于它们的代理白名单造成的,但 reddit 是列入白名单的网站之一,praw 使用requests,pythonanywhere 说它是一个兼容库。常规的submit 也可以正常工作。
File "/home/ibid/.local/lib/python3.7/site-packages/praw/models/reddit/subreddit.py", line 780, in submit_image
return self._submit_media(data, timeout)
File "/home/ibid/.local/lib/python3.7/site-packages/praw/models/reddit/subreddit.py", line 494, in _submit_media
response["json"]["data"]["websocket_url"], timeout=timeout
File "/home/ibid/.local/lib/python3.7/site-packages/websocket/_core.py", line 514, in create_connection
websock.connect(url, **options)
File "/home/ibid/.local/lib/python3.7/site-packages/websocket/_core.py", line 223, in connect
options.pop('socket', None))
File "/home/ibid/.local/lib/python3.7/site-packages/websocket/_http.py", line 122, in connect
sock = _tunnel(sock, hostname, port, auth)
File "/home/ibid/.local/lib/python3.7/site-packages/websocket/_http.py", line 293, in _tunnel
"failed CONNECT via proxy status: %r" % status)
websocket._exceptions.WebSocketProxyException: failed CONNECT via proxy status: 403
【问题讨论】:
-
您应该使用 Python 调试器来更好地递归到问题中。
-
PythonAnywhere 在这里开发。这很有趣——看起来 praw 正在使用 WebSocket 连接来上传图像,这很不寻常。不过,我们使用的代理确实支持 websocket,所以我认为这本身不是问题。也许他们用于 websockets 的服务器是我们没有列入白名单的新服务器。您能否尝试在 /home/ibid/.local/lib/python3.7/site-packages/praw/models/reddit/subreddit.py 中的第 493 行的“websocket.create_connection”调用上方添加此内容: print(response[ "json"]["data"]["websocket_url"]) ...让我们知道它打印出什么?
-
@GilesThomas - 我用 pdb 在那里设置了一个断点并运行了 print 语句。它返回了
wss://ws-034ba158e876c2f4d.wss.redditmedia.com/rte_images/l5xwil1zcpb31?m=AQAAgrU0XXD2NGkZxPDPL3IGEISdU36B0eDHNZHzL-uXEQgL7vCQ我猜问题是“redditmedia.com”没有被列入白名单? -
谢谢!我们已将相应的服务器列入白名单,如果您还有任何问题,请通过电子邮件告知我们。
-
@GilesThomas - 谢谢,现在一切正常。
标签: python python-3.x websocket pythonanywhere praw