'Rust warp How to proxy request with json payload to another url by adding extra header?
How to add extra header like access_token : jshaj_some_really_long_token and also set content-type to Content-Type: application/json in warp post call?
Scenario in detail:
- I want to create API using warp say the end point is
https://example.com/orders - The type is post which needs a payload =>
'{ "myid" : 12 , "price" : 23.2, "transaction" : "buy", "quantity" : 10 }' - Now I want to use
reqwestor any in builtwarphttpclient to send a request to another server endpoint sayhttps://api.example.com/orderswith the above post payload but with the new header which isContent-Type: application/jsonandaccess-token: jshaj_some_really_long_token
Please do share if there are some examples which are using warp and reqwest for post requests. Currently I am referring this
Solution 1:[1]
You can use the warp-reverse-proxy crate for that (maintainer here :) )
You would have to compose the utilities inside to modify what you need as per the example:
#[tokio::main]
async fn main() {
let hello = warp::path!("hello" / String).map(|name| format!("Hello port, {}!", name));
// // spawn base server
tokio::spawn(warp::serve(hello).run(([0, 0, 0, 0], 8080)));
let request_filter = extract_request_data_filter();
let app = warp::path!("hello" / String)
// build proxy address and base path data from current filter
.map(|port| (format!("http://127.0.0.1:{}/", port), "".to_string()))
.untuple_one()
// build the request with data from previous filters
.and(request_filter)
.and_then(proxy_to_and_forward_response)
.and_then(log_response);
// spawn proxy server
warp::serve(app).run(([0, 0, 0, 0], 3030)).await;
}
Notice that the forwarding of the request is done by the lib, if you actually want examples you can check the source code to investigate how it is done.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
