#http-client #no-std #error #embedded-devices #drogue-network

drogue-http-client

基于drogue-network的嵌入式设备HTTP客户端

2个版本

0.0.2 2020年9月30日
0.0.1 2020年9月30日

#1747 in 嵌入式开发

Apache-2.0

31KB
747 代码行

Drogue IoT HTTP客户端

CI crates.io docs.rs Matrix

基于#![no_std]环境,无需分配器的嵌入式系统HTTP客户端。

待办事项

注意:虽然说是“HTTP”,但意思是“可能被解释为HTTP的东西”。它远非一个完整的HTTP 1.1客户端。

  • 处理错误
  • 实现分块编码
  • 等等…

示例

const ENDPOINT: &'static str = "my-host";

fn send() -> Result<(),()> {

  // socket from drogue-network, maybe with TLS
  let mut tcp = TcpSocketSinkSource::from(network, socket);

  let con = HttpConnection::<U1024>::new();

  let data = r#"{"temp": 1.23}"#;

  // response implementation with buffer 
  let handler = BufferResponseHandler::<U1024>::new();

  // create and execute request
  let mut req = con
    .post("/publish/telemetry")
    .headers(&[("Host", ENDPOINT), ("Content-Type", "text/json")])
    .handler(handler)
    .execute_with::<_, consts::U512>(&mut tcp, Some(data.as_bytes()));

  tcp.pipe_data(&mut req)
    .map_err(|_| ThingError::FailedToPublish)?;
    
  let (con, handler) = req.complete();
    
  log::info!(
    "Result: {} {}, Payload: {:?}",
    handler.code(),
    handler.reason(),
    from_utf8(handler.payload())
  );

  // you can do the next call with the returned `con`
}

依赖项

~1MB
~24K SLoC