Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    WiPy HTTPS call

    Scheduled Pinned Locked Moved WiPy 2&3
    sslwipy2.0
    7 Posts 6 Posters 2.5k Views 7 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T Offline
      Tineler
      last edited by

      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?

      1 Reply Last reply Reply Quote 0
      • M Offline
        mmarkvoort
        last edited by

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

        1 Reply Last reply Reply Quote 0
        • B Offline
          bucknall
          last edited by

          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!

          Developer Evangelist - Pycom

          T M 2 Replies Last reply Reply Quote 0
          • T Offline
            Tineler @bucknall
            last edited by

            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)
            
            1 Reply Last reply Reply Quote 0
            • M Offline
              mrainone @bucknall
              last edited by

              @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&amp;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.

              1 Reply Last reply Reply Quote 1
              • D Offline
                danielm
                last edited by

                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.

                1 Reply Last reply Reply Quote 1
                • I Offline
                  Innocenzo
                  last edited by

                  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.

                  1 Reply Last reply Reply Quote 0

                  Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                  Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                  With your input, this post could be even better 💗

                  Register Login
                  • 1 / 1
                  • First post
                    Last post

                  Pycom on Twitter

                  Pycom