【问题标题】:How can I use a SOCKS 4/5 proxy with urllib2?如何在 urllib2 中使用 SOCKS 4/5 代理?
【发布时间】:2011-01-20 01:03:58
【问题描述】:

如何使用带有 urllib2 的 SOCKS 4/5 代理来下载网页?

【问题讨论】:

标签: python proxy urllib2 socks


【解决方案1】:

您可以使用SocksiPy 模块。只需将文件“socks.py”复制到 Python 的 lib/site-packages 目录,就可以开始了。

你必须在 urllib2 之前使用 socks。 (试试看pip install PySocks

例如:

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
socket.socket = socks.socksocket
import urllib2
print urllib2.urlopen('http://www.google.com').read()

你也可以试试pycurl lib和tsocks,更多详情请点击here

【讨论】:

  • 其中一个问题是:urllib 的 DNS 查找似乎没有通过代理。 (即使使用 rdns 选项和 SOCKS4 类型)
  • 只想指出,sourceforge 上的 sockipy 有一些讨厌的错误。至少在此处使用分支:code.google.com/p/socksipy-branch 由于该项目似乎已被遗弃,IMO 有人应该使用该分支,更改名称并写一篇博文,这样人们就不会继续使用这个错误(和 imo写得不好)lib。
  • 我知道这是旧的,但原来的 sockipy 有什么问题?它有什么错误?
  • 无法再从您的链接下载 socksipy。
  • @OJW 这里有另一个答案stackoverflow.com/a/13214222/288875 这也使得主机名查找通过 SOCKS 代理进行
【解决方案2】:

当您需要同时使用许多不同的代理时,添加替代 pan 的答案。

在这种情况下,您需要像使用 http 代理一样创建开启程序。 GitHub中有一个代码https://gist.github.com/869791

opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS4, 'localhost', 9999))
print opener.open('http://www.whatismyip.com/automation/n09230945.asp').read()

【讨论】:

  • 嘿,我使用的是来自 github 的代码。不幸的是,身份验证不起作用。我在 socksipyhandler.py 中传递了正确的用户名和密码,但是,我收到错误(3,'未知用户名或无效密码')。我可以确认我的用户名密码有效,因为我的 cURL 命令使用相同的凭据。
  • 没关系,解决了这个问题,socks.py =) 中有一个错字,顺便说一句,干得好。非常感谢!
【解决方案3】:

由于 SOCKS 是套接字级别的代理,因此您必须替换 urllib2 使用的套接字对象。请查看this 解决方案。如果猴子补丁对您来说不够好,那么您可以尝试从urllib2 标准库中继承或复制修改代码。

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2012-11-06
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多