通过c#中的tcp连接发出发布请求

时间:2017-01-28 02:00:32

标签: c# http curl fiddler http-protocols

我主要是要问这个问题。首先,我尝试定期发帖请求,并收到此错误:C#: Handling WebClient "protocol violation"。然后我尝试建立原始连接以了解发生了什么并最终成为古玩。

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

我正在使用fiddler来捕获我要复制的帖子请求。以下是在fiddler上捕获它时请求的样子:

enter image description here

最重要的是我有请求,在底部我有回复。另请参阅我的回复200 OK

另一个证明这是正常的是我运行这个curl命令的时候: enter image description here 请注意我是如何得到回复的。

现在我想用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 个答案:

答案 0 :(得分: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服务器。