Rust: Making a HTTP POST request (with parameters) | Glenn Gillen
Rust: Making a HTTP POST request (with parameters)

Rust: Making a HTTP POST request (with parameters)

Mar 24, 2022

This one proved to be a little easier given we'd established all of the foundations with a get request:

use hyper::{Body, Method, Client, Request};
use hyper::body::HttpBody as _;
use tokio::io::{stdout, AsyncWriteExt as _};
use url::form_urlencoded;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let params = vec![("foo", "bar")];
let body = form_urlencoded::serialize(params.into_iter());
let client = Client::new();
let req = Request::builder()
.method(Method::POST)
.uri("http://httpbin.org/post")
.body(body)?;
let mut resp = client.request(req).await?;
println!("Response: {}", resp.status());
while let Some(chunk) = resp.body_mut().data().await {
stdout().write_all(&chunk?).await?;
}
Ok(())
}

We've had to unravel the previous get() request into two parts now: 1) building out the request objects and then 2) passing the request into the client to execute it. Adding on to that Request::builder is how and where we'd add additional headers or otherwise manipulate the request before sending it.

Hi, I'm Glenn! 👋 I've spent most of my career working with or at startups. I'm currently the Director of Product @ Ockam where I'm helping developers build applications and systems that are secure-by-design. It's time we started securely connecting apps, not networks.

Previously I led the Terraform product team @ HashiCorp, where we launched Terraform Cloud and set the stage for a successful IPO. Prior to that I was part of the Startup Team @ AWS, and earlier still an early employee @ Heroku. I've also invested in a couple of dozen early stage startups.