Python 2 -> 3, urllib.urlopen (corrected the case)

MRAB python at mrabarnett.plus.com
Sat Oct 14 14:10:23 EDT 2017


On 2017-10-14 18:40, Irv Kalb wrote:
> 
>> On Oct 13, 2017, at 3:27 PM, Irv Kalb <Irv at furrypants.com> wrot
>> If I take the same program and just modify the print statement to add parentheses, then try to run it in Python 3.6 (on a Mac):
>> 
>> ...
>> import urllib
>> 
>> # set the Yahoo finance url, set stock name, ask for last price
>> fullURLWithParameters = 'http://finance.yahoo.com/d/quotes.csv?s=aapl&f=l1'
>> 
>> # read all the data
>> response = urllib.urlopen(fullURLWithParameters).read()
>> 
>> print('Response is: ', response)
>> 
>> I get the following:
>> 
>> Traceback (most recent call last):
>>  File " ....  s/StockQuoteYahooAPIMinimal.py", line 9, in <module>
>>    response = urllib.urlopen(fullURLWithParameters).read()
>> AttributeError: module 'urllib' has no attribute 'urlopen'
>> 
>> 
> 
> Thanks for the responses, but I still can't get it to work correctly.  With MRAB's suggestion, I've modified the code to be:
> 
> from urllib import request
> 
> # set the Yahoo finance url, set stock name, ask for last price
> fullURLWithParameters = 'http://finance.yahoo.com/d/quotes.csv?s=aapl&f=l1'
> 
> # read all the data
> response = request.urlopen(fullURLWithParameters).read()
> 
> print('Response is: ', response)
> 
> 
> But when I run that (Mac Python 3.6.1), I get:
> 
> 
> Traceback (most recent call last):
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1318, in do_open
>      encode_chunked=req.has_header('Transfer-encoding'))
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request
>      self._send_request(method, url, body, headers, encode_chunked)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request
>      self.endheaders(body, encode_chunked=encode_chunked)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders
>      self._send_output(message_body, encode_chunked=encode_chunked)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output
>      self.send(msg)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send
>      self.connect()
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect
>      server_hostname=server_hostname)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket
>      _context=self, _session=session)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in __init__
>      self.do_handshake()
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake
>      self._sslobj.do_handshake()
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake
>      self._sslobj.do_handshake()
> ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
>    File "/Python3 Intro Class/Module 9 - Dictionaries & Internet (not finished)/Module 9 Files/StockQuoteYahooAPIMinimal.py", line 9, in <module>
>      response = request.urlopen(fullURLWithParameters).read()
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
>      return opener.open(url, data, timeout)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open
>      response = meth(req, response)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response
>      'http', request, response, code, msg, hdrs)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 564, in error
>      result = self._call_chain(*args)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
>      result = func(*args)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 756, in http_error_302
>      return self.parent.open(new, timeout=req.timeout)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 526, in open
>      response = self._open(req, data)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 544, in _open
>      '_open', req)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
>      result = func(*args)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1361, in https_open
>      context=self._context, check_hostname=self._check_hostname)
>    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1320, in do_open
>      raise URLError(err)
> urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>
> 
> 
> 
> Using Stefan's suggestion from 2to3:
> 
> import urllib.request, urllib.parse, urllib.error
> 
> # set the Yahoo finance url, set stock name, ask for last price
> fullURLWithParameters = 'http://finance.yahoo.com/d/quotes.csv?s=aapl&f=l1'
> 
> # read all the data
> response = urllib.request.urlopen(fullURLWithParameters).read()
> 
> print('Response is: ', response)
> 
> I get the exact same traceback as above.
> 
> 
> Also, if I add a try/except around the call:
> 
> # read all the data
> try:
>      response = urllib.request.urlopen(fullURLWithParameters).read()
> except urllib.error.URLError as e:
>      print(e)
> 
> 
> I get the same bottom line error from the traceback above:
> 
> <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>
> 
> Huh???
> 
> 
> 
> I've read a bunch of documentation, and it looks like I'm doing everything right, but I cannot get this to work.  Any other suggestions to get this 3 line program to work correctly?
> 
I'm on Windows 10 and it's working for me.

There's a question on StackOverflow that might help you:

https://stackoverflow.com/questions/34503206/ssl-certificate-verify-failed-python



More information about the Python-list mailing list