【问题标题】:How to make HTTP request through a (tor) socks proxy using python?如何使用python通过(tor)socks代理发出HTTP请求?
【发布时间】:2012-06-13 14:55:26
【问题描述】:

我正在尝试使用 python 发出 HTTP 请求。我尝试更改我的 Windows 系统代理(使用 inetcpl.cpl

url = 'http://www.whatismyip.com'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
request.set_proxy('127.0.0.1:9050', 'socks')
response = urllib2.urlopen(request)
response.read()

给我错误

Traceback(最近一次调用最后一次):文件“”,第 1 行,in response = urllib2.urlopen(request) 文件“C:\Python27\lib\urllib2.py”,第 126 行,在 urlopen return _opener.open(url, data, timeout) 文件“C:\Python27\lib\urllib2.py”,第 400 行,打开 response = self._open(req, data) 文件“C:\Python27\lib\urllib2.py”,第 423 行,在 _open 'unknown_open', req) 文件“C:\Python27\lib\urllib2.py”,第 378 行,在 _call_chain 结果 = func(*args) 文件“C:\Python27\lib\urllib2.py”,第 1240 行,位于 unknown_open raise URLError('unknown url type: %s' % type) URLError:

【问题讨论】:

标签: python http proxy socks tor


【解决方案1】:

我是 OP。根据 Tisho 给出的答案,这对我有用:

import urllib, urllib2

##Download SocksiPy - A Python SOCKS client module. ( http://code.google.com/p/socksipy-branch/downloads/list )
##Simply copy the file "socks.py" to your Python's lib/site-packages directory, and initiate a socks socket like this.
## NOTE: you must use socks before urllib2.
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket

url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
print response.read()

【讨论】:

  • 对我来说它只适用于端口 9150。也许 Tor 有新的更新?
  • 'Cache-Control', max-age=0 有什么好处? 9050 和 9150 都不起作用。
【解决方案2】:

似乎 URLLIB2 不支持将 SOCKS 作为代理类型(如此处所述:How can I use a SOCKS 4/5 proxy with urllib2?)。查看http://code.google.com/p/socksipy-branch/ 获取urllib+socks 的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2022-11-26
    • 2012-09-18
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多