2

我问这个问题主要是为了学习。首先,我尝试发出一个常规的发布请求,但我收到了这个错误:C#:Handling WebClient "protocol violation"。然后我试图建立一个原始的联系以了解正在发生的事情并最终成为古玩。

无论如何,这是我的问题:

我正在使用提琴手来捕获我试图复制的发布请求。以下是在 fiddler 上捕获请求时的样子:

在此处输入图像描述

请注意,顶部有请求,底部有响应。另请参阅我的响应是 200 OK

另一个证明这有效的证据是当我运行这个 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 回答