Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pavelrevak/uhttp
uHTTP simple HTTP server for micropython
https://github.com/pavelrevak/uhttp
http http-server micropython python
Last synced: 1 day ago
JSON representation
uHTTP simple HTTP server for micropython
- Host: GitHub
- URL: https://github.com/pavelrevak/uhttp
- Owner: pavelrevak
- Created: 2023-12-27T13:40:55.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-01-27T11:33:02.000Z (10 months ago)
- Last Synced: 2024-01-28T07:36:01.165Z (10 months ago)
- Topics: http, http-server, micropython, python
- Language: Python
- Homepage:
- Size: 26.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# uHTTP: micro HTTP server
## Features:
- support MicroPython and also cPython
- minimalist and low level implementation using posix sockets
- is fully synchronous (not uses ASYNC or multiple threads) but can work with multiple connections
- support delayed response, user can hold client instance and reply later
- support for raw data (HTML, binary, ...) and also for JSON (send and receive)
- need at least 32KB RAM to work (depends on configured limits)
- do many check for bad requests and or headers, and many errors will not break this## usage
```python
import uhttpserver = uhttp.HttpServer(port=9980)
while True:
client = server.wait()
if client:
if client.path == '/':
# result is html
client.respond("hello
uHTTP
")
elif client.path == '/rpc':
# result is json
client.respond({'message': 'hello', 'success': True, 'headers': client.headers, 'query': client.query})
else:
client.respond("Not found", status=404)```
## API
### General methods:
**`import uhttp`**
**`uhttp.decode_percent_encoding(data)`**
- Decode percent encoded data (bytes)
**`uhttp.parse_header_parameters(value)`**
- Parse parameters/directives from header value, returns dict
**`uhttp.parse_query(raw_query, query=None)`**
- Parse raw_query from URL, append it to existing query, returns dict
**`uhttp.parse_url(url)`**
- Parse URL to path and query
**`uhttp.parse_header_line(line)`**
- Parse header line to key and value
**`uhttp.encode_response_data(headers, data)`**
- Encode response data by its type
### Class `HttpServer`:
**`HttpServer(address='0.0.0.0', port=80)`**
#### Properties:
**`socket(self)`**
- Server socket
**`read_sockets(self)`**
- All sockets waiting for communication, used for select
#### Methods:
**`process_events(self, read_events)`**
- Process sockets with read_events, returns None or instance of HttpClient with established connection
**`wait(self, timeout=1)`**
- Wait for new clients with specified timeout, returns None or instance of HttpClient with established connection
### Class `HttpClient`:
**`HttpClient(sock, addr)`**
#### Properties:
**`addr(self)`**
- Client address
**`method(self)`**
- HTTP method
**`url(self)`**
- URL address
**`host(self)`**
- URL address
**`full_url(self)`**
- URL address
**`protocol(self)`**
- Protocol
**`headers(self)`**
- headers dict
**`data(self)`**
- Content data
**`path(self)`**
- Path
**`query(self)`**
- Query dict
**`cookies(self)`**
- Query dict
**`socket(self)`**
- This socket
**`is_loaded_all(self)`**
- State if request is fully loaded
**`content_length(self)`**
- Content length
#### Methods:
**`headers_get(self, key, default=None)`**
- Return value from headers by key, or default if key not found
**`process_request(self)`**
- Process HTTP request when read event on client socket
**`respond(self, data=None, status=200, headers=None, cookies=None)`**
- Create general response with data, status and headers as dict
**`respond_redirect(self, url, status=302, cookies=None)`**
- Create redirect response to URL