WiPy HTTPS call



  • I'm trying to do an HTTPS call, using WiPy, but getting an OSError: -32512 when calling ssl.wrap_socket(s).

    Here's my code

    s = _socket.socket()
        ai = _socket.getaddrinfo("google.com", 443)
        print("Address infos:", ai)
        addr = ai[0][-1]
    
        print("Connect address:", addr)
        s.connect(addr)
    
        s = ssl.wrap_socket(s)
        print(s)
    
        s.write(b"GET / HTTP/1.0\r\n\r\n")
        print(s.read(4096))
    
        s.close()
    

    Do you have any idea, what I'm doing wrong?



  • I have the same problem: https://forum.pycom.io/topic/1056/ssl-socket-communication-between-wipy-2-0

    But if I try to connect with the wipy to a secure Server with ssl

    #client side
    import usocket as socket
    import ssl
    from network import WLAN
    import machine
    
    wlan = WLAN(mode=WLAN.STA)
    
    wlan.connect('TP-LINK_2.4GHz_E113DF', auth=(WLAN.WPA2,"***********"))
    while not wlan.isconnected():
        machine.idle()
    
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
    
    # Require a certificate from the server. We used a self-signed certificate
    # so here ca_certs must be the server certificate itself.
    ssl_sock = ssl.wrap_socket(s,cert_reqs=ssl.CERT_REQUIRED,ca_certs='cert.pem')
    
    ssl_sock.connect(('192.168.1.125', 10023))
    
    ssl_sock.write(b"boo!")
    
    data = ssl_sock.read()
    print(data)
    
    ssl_sock.close()
    
    

    It works without problems. Try to use:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
    

    instead of

    s = socket.socket()
    

    But if I try to set a WiPy as a Server, I receive a Guru Meditation Error. More datails are in the topic linked early.



  • I am having similar experience with Guru meditation errors when doing HTTPS requests: https://forum.pycom.io/topic/1061/https-post-using-urequests-py-and-guru-mediation-error

    Daniel promised to find a solution for this issue.



  • @bucknall Hi.
    Hi, I've tried your example, but I still have a "Guru meditation error".
    It seems to be from the use of the ssl library: I tried to connect to google without ssl and I did not have any problems.
    The error appeared when I tried to connect via ssl, as in your example.
    I attach the sources and the results of the two versions.

    Connect to google without ssl, port 80

    ---------------------[start src]
    import network
    import machine
    import time
    import socket
    import ssl

    WifiNetworkName = "here wifi ssid"
    WifiPassword = "here wifi password"
    wlan = network.WLAN(mode=network.WLAN.STA)
    wlan.connect(WifiNetworkName, auth=(network.WLAN.WPA2, WifiPassword), timeout=5000)
    while not wlan.isconnected():
    machine.idle()
    print("Connected to Wifi\n")
    print(wlan.ifconfig())
    s = socket.socket()
    ai = socket.getaddrinfo("google.com", 80)
    addr = ai[0][-1]
    s.connect(addr)
    s.write(b"GET / HTTP/1.0\r\n\r\n")
    print("----------------[start]")
    print(s.read(4096))
    print("----------------[end]")
    s.close()
    ---------------------[end src]

    Results:

    import thttpok.py
    I (22198) wifi: Init ampdu: 0
    I (22198) wifi: mode : sta (24:0a:c4:00:d6:94)
    I (22199) wifi: sleep disable
    I (23079) wifi: n:6 0, o:6 0, ap:255 255, sta:6 0, prof:6
    I (24068) wifi: state: init -> auth (b0)
    I (24070) wifi: state: auth -> assoc (0)
    I (24073) wifi: state: assoc -> run (10)
    I (24088) wifi: connected with Vodafone-33852835, channel 6
    Connected to Wifi

    ('192.168.1.5', '255.255.255.0', '192.168.1.1', '192.168.1.1')
    ----------------[start]
    b'HTTP/1.0 302 Found\r\nCache-Control: private\r\nContent-Type: text/html; charset=UTF-8\r\nReferrer-Policy: no-referrer\r\nLocation: http://www.google.it/?gfe_rd=cr&ei=2RkCWeKtBOTBXrS3t4gD\r\nContent-Length: 256\r\nDate: Thu, 27 Apr 2017 16:18:33 GMT\r\n\r\n<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">\n<TITLE>302 Moved</TITLE></HEAD><BODY>\n<H1>302 Moved</H1>\nThe document has moved\n<A HREF="http://www.google.it/?gfe_rd=cr&ei=2RkCWeKtBOTBXrS3t4gD">here</A>.\r\n</BODY></HTML>\r\n'
    ----------------[end]

    This is another version of the same software, using the ssl connection, like in your example, I have “Guru Meditation Error: Core 0 panic'ed (abort)”:

    Connect to google with ssl, port 443

    ---------------------[start src]
    import network
    import machine
    import time
    import socket
    import ssl

    WifiNetworkName = "here wifi ssid"
    WifiPassword = "here wifi password"
    wlan = network.WLAN(mode=network.WLAN.STA)
    wlan.connect(WifiNetworkName, auth=(network.WLAN.WPA2, WifiPassword), timeout=5000)
    while not wlan.isconnected():
    machine.idle()
    print("Connected to Wifi\n")
    print(wlan.ifconfig())
    s = socket.socket()
    ai = socket.getaddrinfo("google.com", 443)
    addr = ai[0][-1]
    ss = ssl.wrap_socket(s)
    ss.connect(addr)
    ss.write(b"GET / HTTP/1.0\r\n\r\n")
    print("----------------[start]")
    print(ss.read(4096))
    print("----------------[end]")
    ss.close()
    ---------------------[end src]

    Results:

    import thttps2.py
    I (34325) wifi: Init ampdu: 0
    I (34325) wifi: mode : sta (24:0a:c4:00:d6:94)
    I (34326) wifi: sleep disable
    I (34455) wifi: n:1 0, o:6 0, ap:255 255, sta:1 0, prof:6
    I (35443) wifi: state: init -> auth (b0)
    I (35446) wifi: state: auth -> assoc (0)
    I (35449) wifi: state: assoc -> run (10)
    I (35464) wifi: connected with Vodafone-33852835, channel 1
    Connected to Wifi

    ('192.168.1.5', '255.255.255.0', '192.168.1.1', '192.168.1.1')
    I (45450) wifi: pm start, type:0

    abort() was called at PC 0x4014c133
    Guru Meditation Error: Core 0 panic'ed (abort)

    Backtrace: 0x40085692:0x3ffc4f60 0x40086470:0x3ffc4f80 0x4015023c:0x3ffc4fb0 0x4015057f:0x3ffc4fe0 0x40150706:0x3ffc5060 0x4014bba2:0x3ffc5080
    ……..
    /////wAAAAAAAAAAAAAAAFwz+z8AAAAAAQAAAAAAAAAAAAAAQDj7PwAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAPYMCICAPP4/+Dn8PyxK+z8AAAAAAAAAAEw4+z8AAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    ================= CORE DUMP END =================
    Rebooting...
    ets Jun 8 2016 00:22:57

    rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0x00
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:QIO, clock div:2
    load:0x3fff9010,len:8
    load:0x3fff9018,len:248
    load:0x40078000,len:4056
    load:0x4009fc00,len:920
    entry 0x4009fde4
    I (1548) wifi: wifi firmware version: 90b1b8b
    I (1549) wifi: config NVS flash: disabled
    I (1549) wifi: config nano formating: disabled
    I (1564) wifi: Init dynamic tx buffer num: 32
    I (1565) wifi: wifi driver task: 3ffd63f4, prio:23, stack:3584
    I (1565) wifi: Init static rx buffer num: 10
    I (1567) wifi: Init dynamic rx buffer num: 0
    I (1571) wifi: Init rx ampdu len mblock:7
    I (1575) wifi: Init lldesc rx ampdu entry mblock:4
    I (1579) wifi: wifi power manager task: 0x3ffdb7b0 prio: 21 stack: 2560
    I (1586) wifi: sleep disable
    I (2575) wifi: wifi timer task: 3ffdc844, prio:22, stack:3584
    I (2591) wifi: Init ampdu: 0
    I (2591) wifi: mode : softAP (24:0a:c4:00:d6:95)
    MicroPython v1.8.6-593-g8e4ed0fa on 2017-04-12; LoPy with ESP32
    Type "help()" for more information.



  • Hi @bucknall

    This code works for me in general. But doing further investigation, I found out, that I still get the error while running the code within a call back for the Blutooth write event:

    char1_cb = chr1.callback(trigger=Bluetooth.CHAR_WRITE_EVENT, handler=char1_cb)
    


  • Hi @Tineler,

    I've just been testing your code - I'm not sure what's throwing the error exactly but I believe that it's coming from trying to wrap an existed and connected socket with ssl. I think this behaviour is unexpected, so I'll report it internally.

    I re-wrote your example but wrapped the socket with ssl before connecting them and it seemed to work without issue. Maybe try to use the example below:

    import socket
    import ssl
    
    s = socket.socket()
    ai = socket.getaddrinfo("google.com", 443)
    addr = ai[0][-1]
    
    ss = ssl.wrap_socket(s)
    ss.connect(addr)
    ss.write(b"GET / HTTP/1.0\r\n\r\n")
    print(ss.read(4096))
    ss.close()
    

    Let me know if that works for you!



  • I also get the error message when trying code from Pycom documentation.


 

Pycom on Twitter