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)
    

  • administrators

    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.


Log in to reply
 

Looks like your connection to Pycom Forum was lost, please wait while we try to reconnect.