For a little fun私はRustで簡単なHTTPリクエストを作りたかったのです。私は一緒にこれを投げたし、それは素晴らしい作品:RustのTcpSocket :: write()が "invalid input"を返す原因は何ですか?
use std::io::TcpStream;
fn main() {
// This just does a "GET /" to www.stroustrup.com
println!("Establishing connection...");
let mut stream = TcpStream::connect("www.stroustrup.com:80").unwrap();
println!("Writing HTTP request...");
// unwrap() the result to make sure it succeeded, at least
let _ = stream.write(b"GET/HTTP/1.1\r\n\
Host: www.stroustrup.com\r\n\
Accept: */*\r\n\
Connection: close\r\n\r\n").unwrap();
println!("Reading response...");
let response = stream.read_to_string().unwrap();
println!("Printing response:");
println!("{}", response);
}
応答は次のとおりです。
Establishing connection...
Writing HTTP request...
Reading response...
Printing response:
HTTP/1.1 200 OK
...and the rest of the long HTTP response with all the HTML as I'd expect...
しかし、私は/C++.html
代わりに/
する要求を変更した場合:
use std::io::TcpStream;
fn main() {
// The only change is to "GET /C++.html" instead of "GET /"
println!("Establishing connection...");
let mut stream = TcpStream::connect("www.stroustrup.com:80").unwrap();
println!("Writing HTTP request...");
// unwrap() the result to make sure it succeeded, at least
let _ = stream.write(b"GET /C++.html HTTP/1.1\r\n\
Host: www.stroustrup.com\r\n\
Accept: */*\r\n\
Connection: close\r\n\r\n").unwrap();
println!("Reading response...");
let response = stream.read_to_string().unwrap();
println!("Printing response:");
println!("{}", response);
}
ソケットに戻ります"invalid input"
:
Establishing connection...
Writing HTTP request...
Reading response...
thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: invalid input', /Users/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-mac/build/src/libcore/result.rs:746
なぜソケットは"invalid input"
を返すのですか? TCPソケットはHTTPプロトコルを認識していません(telnetとnetcatでリクエストをテストしました。正しいです)。したがって、HTTPリクエスト/レスポンスについて不平を言うことはできません。
ここでも"invalid input"
は何を意味していますか?なぜこれは機能しませんか?
マイさびバージョン(私はOS X 10.10.1によ):"invalid input"
エラーがソケットから来ていません
$ rustc --version
rustc 1.0.0-nightly (ea6f65c5f 2015-01-06 19:47:08 +0000)