How to make HTTP request through a (tor) socks proxy using python?

11,639

Solution 1

I'm the OP. According to the answer given by Tisho, this worked for me:

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()

Solution 2

It seems URLLIB2 doesn't support SOCKS as a proxy type(as explained here: How can I use a SOCKS 4/5 proxy with urllib2?). Look at http://code.google.com/p/socksipy-branch/ for an example of urllib+socks.

Share:
11,639
claws
Author by

claws

Updated on July 18, 2022

Comments

  • claws
    claws almost 2 years

    I'm trying to make a HTTP request using python. I tried changing my windows system proxy (using 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()
    

    is giving me the error

    Traceback (most recent call last): File "", line 1, in response = urllib2.urlopen(request) File "C:\Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 400, in open response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 423, in _open 'unknown_open', req) File "C:\Python27\lib\urllib2.py", line 378, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 1240, in unknown_open raise URLError('unknown url type: %s' % type) URLError:

  • Mastergalen
    Mastergalen over 10 years
    For me it only worked with port 9150. New update in Tor perhaps?
  • NumenorForLife
    NumenorForLife almost 9 years
    What's the benefit of 'Cache-Control', max-age=0? And neither 9050 nor 9150 works.