Сделайте почтовый запрос через TCP-соединение в C#

Я задаю этот вопрос прежде всего для изучения. Сначала я попытался сделать обычный почтовый запрос, и я получил эту ошибку: C#: Обработка WebClient "нарушение протокола". Затем я попытался установить необработанную связь, чтобы понять, что происходит, и в итоге оказался любопытным.

В любом случае вот мой вопрос:

Я использую Fiddler для захвата почтового запроса, который я пытаюсь повторить. Вот как выглядит запрос при захвате его на fiddler:

Обратите внимание, что сверху у меня есть запрос, а внизу у меня есть ответ. Также посмотрите, как мой ответ 200 ОК

Еще одно доказательство того, что это работает, - это когда я запускаю команду 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 ответ, почему? Что я могу делать не так: Я хотел бы узнать, что я делаю неправильно.

1 ответ

Решение

Потратив 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 с первой строки исправлена ​​проблема. Я думаю, что в коде не было ничего плохого, проблема в том, что http-сервер работает на 170.55.7.163.

Другие вопросы по тегам