Edited :
I use corporate env , on my home env the script works ok
I'm trying to get response from some weather site . I made a simple python script .
import urllib.request
import json
req=urllib.request.Request("http://api.wunderground.com/api/e0b319c6f7e8115a/geolookup/conditions/q/IA/Cedar_Rapids.json")
response=urllib.request.urlopen(req)
data = json.loads(response.read().decode()) #<--according to @falsetru fix
print (data)
When I paste the URL into browser, I get response , but in python I get error Please help
Full error
Traceback (most recent call last):
File "C:\Python34\weather.py", line 14, in <module>
response=urllib.request.urlopen(req)
File "C:\Python34\lib\urllib\request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "C:\Python34\lib\urllib\request.py", line 455, in open
response = self._open(req, data)
File "C:\Python34\lib\urllib\request.py", line 473, in _open
'_open', req)
File "C:\Python34\lib\urllib\request.py", line 433, in _call_chain
result = func(*args)
File "C:\Python34\lib\urllib\request.py", line 1202, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:\Python34\lib\urllib\request.py", line 1177, in do_open
r = h.getresponse()
File "C:\Python34\lib\http\client.py", line 1172, in getresponse
response.begin()
File "C:\Python34\lib\http\client.py", line 351, in begin
version, status, reason = self._read_status()
File "C:\Python34\lib\http\client.py", line 313, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Python34\lib\socket.py", line 371, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
Thanks
Your code works as expected, except that the response bytes should be decoded because
json.loads
expects astr
object.UPDATE
You need to configure proxy in Python code like the browser. You can use
urllib.request.Request.set_proxy
, orurllib.request.ProxyHandler
:I would use requests and make your code much simpler: