8

I am trying to access the web via a proxy server in Python. I am using the requests library and I am having an issue with authenticating my proxy as the proxy I am using requires a password.

proxyDict = { 
          'http'  : 'username:[email protected]', 
          'https' : 'username:[email protected]'
        }
r = requests.get("http://www.google.com", proxies=proxyDict)

I am getting the following error:

Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
r = requests.get("http://www.google.com", proxies=proxyDict)
File "C:\Python27\lib\site-packages\requests\api.py", line 78, in get
:param url: URL for the new :class:`Request` object.
File "C:\Python27\lib\site-packages\requests\api.py", line 65, in request
"""Sends a POST request. Returns :class:`Response` object.
File "C:\Python27\lib\site-packages\requests\sessions.py", line 187, in request
def head(self, url, **kwargs):
File "C:\Python27\lib\site-packages\requests\models.py", line 407, in send
"""
File "C:\Python27\lib\site-packages\requests\packages\urllib3\poolmanager.py", line     127, in proxy_from_url
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line    521, in connection_from_url
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 497, in get_host
ValueError: invalid literal for int() with base 10: '[email protected]'

How do I solve this?

Thanks in advance for your help.

1
  • 2
    It's good manners to mark correct answers as correct Commented Aug 26, 2013 at 11:40

3 Answers 3

17

You should remove the embedded username and password from proxyDict, and use the auth parameter instead.

import requests
from requests.auth import HTTPProxyAuth

proxyDict = { 
          'http'  : '77.75.105.165', 
          'https' : '77.75.105.165'
        }
auth = HTTPProxyAuth('username', 'mypassword')

r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth)
Sign up to request clarification or add additional context in comments.

9 Comments

Thanks, I tried that and it solved the error but it still isn't connecting to the proxy. When I look at the returned headers (r.headers), one of them is 'proxy-connection': 'close', which seems to mean its taking too long to connect to the proxy, is there a way to authenticate before requesting any URLs?
@MarkCollier, please try code from edited answer. It was error In first version. Added HTTPProxyAuth, now it should work.
from requests.auth import HTTPProxyAuth Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> from requests.auth import HTTPProxyAuth ImportError: cannot import name HTTPProxyAuth
@MarkCollier, upgrade requests: pip install --upgrade requests
@MarkCollier, you mean proxy connection error, or cannot import name? I've tested this code on local proxy server and it works. When i'm entering wrong username or password, r.status_code is 407. What is yours?
|
3

I've been having a similar problem on Windows and found the only way to get requests to work was to set the proxies as environment variables before I started Python. For you this would be something like this:

set HTTP_PROXY=http://77.75.105.165
set HTTPS_PROXY=https://77.75.105.165

You might also want to check is there's a specific port required, and if so set it after the url. For example, if the port is 8443 then do:

set HTTP_PROXY=http://77.75.105.165:8443
set HTTPS_PROXY=https://77.75.105.165:8443

1 Comment

1

You can use urllib library for this.

from urllib import request
request.urlopen("your URL", proxies=request.getproxies())

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.