Temporarily unable to load content:
The code first sets up the ethernet interface (eth
). Then, it initializes a request object using a socket
and the esp
interface.
import board import busio from digitalio import DigitalInOut from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket import adafruit_requests as requests cs = DigitalInOut(board.D10) spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) # Initialize ethernet interface with DHCP eth = WIZNET5K(spi_bus, cs) # Initialize a requests object with a socket and ethernet interface requests.set_socket(socket, eth)
HTTP GET with Requests
The code makes a HTTP GET request to Adafruit's WiFi testing website - http://wifitest.adafruit.com/testwifi/index.html.
To do this, we'll pass the URL into requests.get()
. We're also going to save the response from the server into a variable named response
. The call to requests.get()
is wrapped in a loop which retries 3 times in the event of a failed request.
While we requested data from the server, we'd like to see what the server responded with. Since we already saved the server's response
, we can read it back. Luckily for us, requests automatically decodes the server's response into human-readable text. You can read it back by calling response.text
.
Lastly, we'll perform a bit of cleanup by calling response.close()
. This closes, deletes, and collect's the response's data.
print("Fetching text from %s"%TEXT_URL) while not response: try: response = requests.get(TEXT_URL) failure_count = 0 except AssertionError as error: print("Request failed, retrying...\n", error) failure_count += 1 if failure_count >= attempts: raise AssertionError("Failed to resolve hostname, \ please check your router's DNS configuration.") continue print('-'*40) print("Text Response: ", response.text) print('-'*40) response.close()
While some servers respond with text, some respond with json-formatted data consisting of attribute–value pairs.
CircuitPython_Requests can convert a JSON-formatted response from a server into a CPython dict
object.
We can also fetch and parse json data. We'll send a HTTP get to a url we know returns a json-formatted response (instead of text data).
Then, the code calls response.json()
to convert the response to a CPython dict
.
print("Fetching JSON data from %s"%JSON_GET_URL) while not response: try: response = requests.get(JSON_GET_URL) failure_count = 0 except AssertionError as error: print("Request failed, retrying...\n", error) failure_count += 1 if failure_count >= attempts: raise AssertionError("Failed to resolve hostname, \ please check your router's DNS configuration.") continue print('-'*40) print("JSON Response: ", response.json()) print('-'*40) response.close()
HTTP POST with Requests
Requests can also POST data to a server by calling the requests.post
method, passing it a data
value.
data = '31F' print("POSTing data to {0}: {1}".format(JSON_POST_URL, data)) while not response: try: response = requests.post(JSON_POST_URL, data=data) failure_count = 0 except AssertionError as error: print("Request failed, retrying...\n", error) failure_count += 1 if failure_count >= attempts: raise AssertionError("Failed to resolve hostname, \ please check your router's DNS configuration.") continue print('-'*40) json_resp = response.json() # Parse out the 'data' key from json_resp dict. print("Data received from server:", json_resp['data']) print('-'*40) response.close()
You can also post json-formatted data to a server by passing json_data
into the requests.post
method.
json_data = {"Date" : "July 25, 2019"} print("POSTing data to {0}: {1}".format(JSON_POST_URL, json_data)) while not response: try: response = requests.post(JSON_POST_URL, json=json_data) failure_count = 0 except AssertionError as error: print("Request failed, retrying...\n", error) failure_count += 1 if failure_count >= attempts: raise AssertionError("Failed to resolve hostname, \ please check your router's DNS configuration.") continue print('-'*40) json_resp = response.json() # Parse out the 'json' key from json_resp dict. print("JSON Data received from server:", json_resp['json']) print('-'*40) response.close()
Page last edited January 22, 2025
Text editor powered by tinymce.