2

私は主に学ぶためにこの質問をしています。最初に、通常の投稿リクエストを作成しようとしましたが、次のエラーが発生しました: C#: Handling WebClient "protocol violation"。それから私は何が起こっているのかを理解するために生のつながりを作ろうとし、最終的に好奇心旺盛になりました.

とにかくここに私の質問があります:

フィドラーを使用して、複製しようとしている投稿要求をキャプチャしています。フィドラーでキャプチャしたときのリクエストは次のようになります。

ここに画像の説明を入力

上にリクエストがあり、下にレスポンスがあることに注意してください。また、私の応答が 200 OK であることも確認してください

これが機能していることのもう 1 つの証拠は、次のcurl コマンドを実行したときです ここに画像の説明を入力

今、私はc#で同じことをしたいと思っています。ここに私のコードがあります:

        // connect to device
        TcpClient client = new TcpClient();
        client.Connect(System.Net.IPAddress.Parse("170.55.7.163"), 80);

        // create post data to be sent
        string postDataAsString = @"POST http://170.55.7.163/cgi-bin/api.values.post HTTP/1.1" + Environment.NewLine +
            "Host: 170.55.7.163" + Environment.NewLine +
            "Content-Length: 25" + Environment.NewLine +
            Environment.NewLine +
            Environment.NewLine +
            "P270=2&sid=3dc7588be24f";

        byte[] postDataBinary = System.Text.Encoding.UTF8.GetBytes(postDataAsString);

        // make post request
        client.Client.Send(postDataBinary);

        // get response
        byte[] bytes = new byte[1024];
        int lengthOfResponse = client.Client.Receive(bytes);

        var resp = System.Text.Encoding.UTF8.GetString(bytes, 0, lengthOfResponse);

        // I get a bad request in here why!? 

なぜ 200 応答が得られないのですか? 何が間違っているのでしょうか :/ . 私は自分が間違っていることを学びたいと思います。

4

1 に答える 1

3

とても好奇心旺盛で4時間を無駄にした後、私は問題を見つけました。私が変更され:

string postDataAsString = @"POST http://170.55.7.163/cgi-bin/api.values.post HTTP/1.1" + Environment.NewLine +
        "Host: 170.55.7.163" + Environment.NewLine +
        "Content-Length: 25" + Environment.NewLine +
        Environment.NewLine +
        Environment.NewLine +
        "P270=2&sid=3dc7588be24f";

string postDataAsString = @"POST /cgi-bin/api.values.post HTTP/1.1" + Environment.NewLine +
            "Host: 170.55.7.163" + Environment.NewLine +
            "Content-Length: 25" + Environment.NewLine +
            Environment.NewLine +
            Environment.NewLine +
            "P270=2&sid=6aec588bfe62";

最初の行から削除http://170.55.7.163すると、問題が修正されました。コードに問題はなかったと思います。問題は、170.55.7.163 で実行されている http サーバーです。

于 2017-01-28T02:25:08.130 に答える