【发布时间】:2014-01-28 17:10:13
【问题描述】:
我有以下代码:
string url = "https://myurl.com/is/here/example?param1=100¶m2=200";
string post = "POST " + url + " HTTP/1.1\r\n" +
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" +
"Accept-Encoding: gzip, deflate\r\n" +
"Accept-Language: en-US,en;q=0.5\r\n" +
"Connection: keep-alive\r\n" +
"Host: myurl.com\r\n" +
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\r\n" +
"Content-type: application/json\r\n" +
"X-HTTP-Method-Override: GET\r\n" +
"X-MY-CUSTOM-HEADER: headervalue\r\n\r\n";
TcpClient tcp = new TcpClient("myurl.com", 443);
string returnData = string.Empty;
using (SslStream stream = new SslStream(tcp.GetStream()))
{
//Authenticate here...
byte[] data = Encoding.ASCII.GetBytes(post);
stream.Write(data, 0, data.Length);
stream.Flush();
stream.ReadByte();
data = new byte[4096];
var n = stream.Read(data, 0, data.Length);
using (MemoryStream ms = new MemoryStream(data, 0, n))
{
ms.ReadByte();
ms.ReadByte();
using (DeflateStream df = new DeflateStream(ms, CompressionMode.Decompress))
using (StreamReader rd = new StreamReader(df))
{
returnData = rd.ReadToEnd();
}
}
}
tcp.Close();
但是,响应始终为空。帖子字符串是否正确?我在这里错过了什么?
编辑:
我正在使用 SslStream,它似乎正在检索数据。但是,有没有办法只读取直到收到所有数据而不是
【问题讨论】:
-
您是否有理由尝试使用
TcpClient来执行此操作,而不是使用原生与 HTTP(S) 通信的东西? -
不要自己动手,用HttpWebRequest
-
我已经在使用 HttpWebRequest 并且工作正常。但是我想尝试使用 TcpClient 来查看是否存在性能差异。
-
如果您可以使用
TcpClient编写比HttpWebRequest实现的性能更高的代码,为什么该类的开发人员还没有这样做并将该实现放在HttpWebRequest中?
标签: c# httpwebrequest tcpclient