c# - 如何使用 TcpClient 向网站发出请求

标签 c# tcpclient

我正在尝试使用 TcpClient 向网站发出请求,但我无法让它工作。首先,我与 remoteHost 建立连接并写入 requestStr 变量中的请求 header 。之后我从远程流中读取并期望得到响应,但我什么也没得到。我还使用 while 循环中的代码从浏览器接收请求 header ,该浏览器使用我的应用程序作为代理并且工作正常。

Eol 变量是\r\n

requestStr 变量是:

GET http://steam.com/ HTTP/1.1
Host: steam.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

代码片段:

TcpClient remoteClient = new TcpClient(request.GetRemoteHost(), 80);
byte[] remoteRequest = Encoding.UTF8.GetBytes(requestStr);
NetworkStream remoteStream = remoteClient.GetStream();
remoteStream.Write(remoteRequest, 0, remoteRequest.Length);
remoteStream.Flush();

int j;
string remoteStr = "";
byte[] remoteBuffer = new byte[App.BufferSize];
recvRequest = true;
while (recvRequest && (j = remoteStream.Read(remoteBuffer, 0, remoteBuffer.Length)) != 0) {
    string receivedData = Encoding.ASCII.GetString(remoteBuffer, 0, j);

    if (receivedData.IndexOf(Eol) < 0) {
        remoteStr += receivedData;
    } else {
        remoteStr += receivedData.Substring(0, receivedData.IndexOf(Eol + Eol));
        recvRequest = false;
    }
}

MessageBox.Show(remoteStr);

最佳答案

查看您发送的请求,您不包括 a blank line (仍然以\r\n 结尾)在它的末尾。这标志着 header 的结尾,因此服务器知道它已经收到所有 header 并可以处理请求。

关于c# - 如何使用 TcpClient 向网站发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35846560/

相关文章:

go - 客户端无法将数据发送到 golang 中的 TCP 服务器?

c# - "Compile with/main to specify the type that contains the entry point."

c# - NUnit:字典断言

c# - 实例化后的类实例为空

c# - 创建客户端列表时,Address 应该是一个结构体(类客户端)吗?

c - tcpclient - 用于获取 c 中内容的 Web 客户端

tcp - 如何让JMeter的BinaryTCPClientImpl接受ACK?

java - 保证TCP客户端和服务器之间不丢包

c# - 如果 Tcplistener 不可用,则 Tcpclient 连接卡住

c# - 在 C# 中从数据库加载组合框