Getting "error Tunnel connection failed: 403 Forbidden" with mechanize and pythonanywhere

flask, mechanize, python, pythonanywhere, web-applications

Solution

If you are using a free account at pythonanywhere.com then keep in mind that access to external sites via `urllib2` is restricted to a set of white listed hosts. Paid account can access any external sites.

Problem

I wrote a small webapp using python, mechanize and flask. It works perfectly when I run it locally. When deployed on `pythonanywhere.com`, I get an "Internal Server Error" with the following stack trace: ``` Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/home/Lanaru/mysite/gpaviewer.py", line 34, in index gpa = get_gpa(request.form['username'], request.form['password']) **** File "/home/Lanaru/mysite/gpaviewer.py", line 11, in get_gpa br.open(r'https://websiteomitted.com/') File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open return self._mech_open(url, data, timeout=timeout) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 230, in _mech_open response = UserAgentBase.open(self, request, data) File "/usr/local/lib/python2.7/dist-packages/mechanize/_opener.py", line 193, in open response = urlopen(self, req, data) File "/usr/local/lib/python2.7/dist-packages/mechanize/_urllib2_fork.py", line 344, in _open '_open', req) File "/usr/local/lib/python2.7/dist-packages/mechanize/_urllib2_fork.py", line 332, in _call_chain result = func(*args) File "/usr/local/lib/python2.7/dist-packages/mechanize/_urllib2_fork.py", line 1170, in https_open return self.do_open(conn_factory, req) File "/usr/local/lib/python2.7/dist-packages/mechanize/_urllib2_fork.py", line 1118, in do_open raise URLError(err) URLError: <urlopen error Tunnel connection failed: 403 Forbidden> ``` Why am I getting this urlopen error and how can I fix it?

Original source

Related problems