In Python I can use urllib2 (and urllib) to open external URLs such as Google. However, I am hitting issues when opening localhost URLs. I have a python SimpleHTTPServer running on port 8280 which I can browse to successfully using http://localhost:8280/.
python -m SimpleHTTPServer 8280
It's also worth noting that I'm running Ubuntu which has CNTLM running to handle authentication to our corporate web proxy. Therefore, wget doesn't actually work with localhost either so I don't think this is a urllib issue!
Test Script (test_urllib2.py):
import urllib2
print "Opening Google..."
google = urllib2.urlopen("http://www.google.com/")
print google.read(100)
print "Google opened."
print "Opening localhost..."
localhost = urllib2.urlopen("http://localhost:8280/")
print localhost.read(100)
print "localhost opened."
Output:
$ ./test_urllib2.py
Opening Google...
<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><
Google opened.
Opening localhost...
Traceback (most recent call last):
File "./test_urllib2.py", line 10, in <module>
localhost = urllib2.urlopen("http://localhost:8280/")
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 429, in error
result = self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 605, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
r = h.getresponse()
File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
response.begin()
File "/usr/lib/python2.6/httplib.py", line 391, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine
SOLUTION: The problem was indeed because I am using CNTLM behind our corporate web proxy (specifics of why this caused a problem I can't be sure). The solution was to use the ProxyHandler:
proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://localhost:8380/").read(100)
Thanks to loki2302 for pointing me here.
Check whether the problem is really in opening localhost, or whether JBoss gives invalid response (that the browser somehow works around):
wget http://localhost:8280/
you can try running a simple Python HTTP server to test against something other than JBoss:
python -m SimpleHTTPServer 8280
try using urllib:
import urllib
localhost = urllib.urlopen("http://localhost:8280/")
print localhost.read(100)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With