Je voudrais créer une fonction de type curl dans Rust.std :: io :: TcpStream :: read_as_string renvoie une chaîne vide
Jusqu'à présent, voici le code que j'utilise:
match Url::parse(url) {
Ok(u) => {
match TcpStream::connect(u.host.as_slice(), 80) {
Ok(mut socket) => {
let req = format!(
"GET {:s} HTTP/1.1\r\nHost: {:s}\r\nAccept: */*\r\nContent-Length: 0\r\nContent-Type: aplication/x-www-form-urlencoded\r\n",
u.path.path.as_slice(), u.host
);
socket.write(req.as_bytes());
match socket.read_to_string() {
Ok(res) => println!("{}", res.as_slice()),
Err(e) => fail!("Error: {}", e)
};
drop(socket);
},
Err(e) => fail!("Error: {}", e)
};
},
Err(e) => fail!("Error: {}", e)
};
Le problème est, si la requête HTTP est correctement formaté,
println!("{}", res.as_slice())
n'affichera rien, avec une URL.
Si le format n'est pas correct, le même code affichera 403 ou 400 erreurs. Cela signifie-t-il que la socket var est bien remplie?
D'où le problème pourrait-il provenir? Le serveur ou la requête? Par ailleurs, le code étant un peu trop long, j'aimerais utiliser la macro essayer! mais elle soulève une erreur en faisant, par exemple:
try!(TcpStream::connect(u.host.as_slice(), 80)
Revendiquer HTTP/1.0 pour une chose si simple est probablement OK. Réclamer HTTP/1.1 ne demande que des problèmes, à moins que vous n'ayez implémenté un certain nombre de choses supplémentaires (par exemple l'encodage de transfert deflate et chunked). Les serveurs sont entièrement libres de vous envoyer des choses que vous ne pourrez pas comprendre. –
veuillez également signaler l'erreur que vous obtenez en utilisant l'essai! macro –