C# 使用套接字获取HTTP时的额外字符
我使用套接字连接到各种XML Web服务。但是当我将接收到的字节转换成字符串(通常是UTF-8编码的)时,我会得到一些额外的字符串。大多数情况下,返回的字符串以“4000\r\n”开头,然后“\r\n4000\r\n”散布在数据中。其他情况下,字符串可以是“\r\nd1ef\r\n”或4-8个十六进制“字母”的其他组合。有时它是一次完成的。我注意到一些东西:C# 使用套接字获取HTTP时的额外字符,c#,sockets,http,C#,Sockets,Http,我使用套接字连接到各种XML Web服务。但是当我将接收到的字节转换成字符串(通常是UTF-8编码的)时,我会得到一些额外的字符串。大多数情况下,返回的字符串以“4000\r\n”开头,然后“\r\n4000\r\n”散布在数据中。其他情况下,字符串可以是“\r\nd1ef\r\n”或4-8个十六进制“字母”的其他组合。有时它是一次完成的。我注意到一些东西: 如果开头没有“xxxx\r\n”,则字符串是干净的 如果我多次调用同一个URL,我总是会得到相同的结果(相同位置的相同额外字符串) 字符
- 如果开头没有“xxxx\r\n”,则字符串是干净的
- 如果我多次调用同一个URL,我总是会得到相同的结果(相同位置的相同额外字符串)
- 字符串通常是4个十六进制字符,周围有“\r\n”,但也可以是8个十六进制字符
- 它发生在许多不同的Web服务上,因此可能不在服务器端
- 由于它总是以“\r\n”开头和结尾,因此它不能是随机的额外数据字节
var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.ReceiveTimeout = timeout;
client.SendTimeout = timeout;
client.NoDelay = true;
client.Connect(server, port);
//send HTTP request
client.Send(totalData, totalData.Length, SocketFlags.None);
//read the data
var buffer = new byte[32];
byteStream = new MemoryStream();
while (true)
{
var readCount = client.Receive(buffer, buffer.Length, SocketFlags.None);
if (readCount > 0)
{
byteStream.Write(buffer, 0, readCount);
}
else
break;
}
client.Disconnect(false);
client.Close();
//get the HTTP response
var bytes = byteStream.ToArray();
var ascii = Encoding.ASCII.GetString(bytes.ToArray());
var bodyPosition = ascii.IndexOf("\r\n\r\n") + 4;
var bodyBytes = new byte[bytes.Length - bodyPosition];
Array.Copy(bytes,bodyPosition,bodyBytes,0,bodyBytes.Length);
var body = dataEncoding.GetString(bodyBytes);
有人知道我做错了什么吗?这是分块传输编码。使用分块传输编码的HTTP库。。使用分块传输编码的HTTP库。。使用分块传输编码的HTTP库。。使用HTTP库。可能重复的可能重复的可能重复的Hmm的可能重复的可能重复的,我估计同样多。我确实使用了HttpWebRequest,但发现在某些情况下速度非常慢,请参阅。我想我需要仔细阅读分块HTTP,看看是否可以修改代码来解释它。谢谢这对您没有帮助,但实现分块传输编码支持应该不会太难。:-)嗯,我也这么想。我确实使用了HttpWebRequest,但发现在某些情况下速度非常慢,请参阅。我想我需要仔细阅读分块HTTP,看看是否可以修改代码来解释它。谢谢这对您没有帮助,但实现分块传输编码支持应该不会太难。:-)嗯,我也这么想。我确实使用了HttpWebRequest,但发现在某些情况下速度非常慢,请参阅。我想我需要仔细阅读分块HTTP,看看是否可以修改代码来解释它。谢谢这对您没有帮助,但实现分块传输编码支持应该不会太难。:-)嗯,我也这么想。我确实使用了HttpWebRequest,但发现在某些情况下速度非常慢,请参阅。我想我需要仔细阅读分块HTTP,看看是否可以修改代码来解释它。谢谢这对您没有帮助,但实现分块传输编码支持应该不会太难。:-)