UIFlow 2.0.1 HTTP GET and parse JSON
-
Hi team,
I'm trying to complete the simplest of all possible projects, and for the life of me after two days of troubleshooting I simply can't figure it out.
Device: Core2
OS: Mac OS 14.2.1
Software: UIFlow v2.0.1I'm trying to HTTP GET a local JSON endpoint with some data.
I started off trying to program this with the visual interface, but found that I quickly had to switch to python because of the missing 'urequests' lib (there's another thread about that on this forum).
Using the 'requests' library, I found that I can perform the GET request and actually get a 200 status OK back. However, when using the response.json() call, the program hangs with no error and no output.
If I run the same requests in python3 on my desktop environment, it all works.
Here's where I got to:
import os, sys, io import M5 from M5 import * import network import requests title0 = None statTitle = None resTitle = None stat = None res = None # http_req = None wlan = None status = None def setup(): global title0, statTitle, resTitle, stat, res, http_req, wlan, status M5.begin() Widgets.fillScreen(0x222222) title0 = Widgets.Title("Powermonitor", 3, 0xffffff, 0x0000FF, Widgets.FONTS.DejaVu18) statTitle = Widgets.Label("Status:", 2, 28, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu18) resTitle = Widgets.Label("Response:", 2, 57, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu18) stat = Widgets.Label("...", 110, 29, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu18) res = Widgets.Label("...", 111, 57, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu18) stat.setText(str('Fetching')) http_req = requests.get('http://192.168.10.22/api/v1/data') status = http_req.status_code stat.setText(str(status)) print(str(http_req.status_code)) print(str(http_req.reason)) print(str(http_req.encoding)) # print(str(http_req.raw)) # print(str(http_req.text())) data = http_req.json() print(str(data)) # print(str(http_req.json())) # http_req.close() # print(dir(responseJson)) # print(responseJson()) # res.setText(str(http_req.json())) def loop(): global title0, statTitle, resTitle, stat, res, http_req, wlan, status M5.update() if __name__ == '__main__': try: setup() while True: loop() except (Exception, KeyboardInterrupt) as e: try: from utility import print_error_msg print_error_msg(e) except ImportError: print("please update to latest firmware")``` -
Are you sure its hanging and not taking ages to get a response?
-
Yes, the endpoint responds almost instantly. Also the status code immediately comes back as as '200'.
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