我的网络响应的内容长度似乎总是-1我的Web请求后。 我敢肯定你按摩和签名是正确的。 我在做什么错在这里?
string msg = string.Format("{0}{1}{2}", nonce, clientId, apiKey);
string signature = ByteArrayToString(SignHMACSHA256(apiSecret, StrinToByteArray(msg))).ToUpper();
const string endpoint = "https://www.bitstamp.net/api/balance/";
HttpWebRequest request = WebRequest.Create(endpoint) as HttpWebRequest;
request.Proxy = null;
request.Method = "POST";
request.ContentType = "application/xml";
request.Accept = "application/xml";
request.Headers.Add("key", apiKey);
request.Headers.Add("signature", signature);
request.Headers.Add("nonce", nonce.ToString());
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
从文档 ,
所述的ContentLength属性包含与响应中返回的的ContentLength标头的值。 如果的ContentLength头没有在响应中设置,的ContentLength被设置为值-1。
得到它与Web客户端,而不是HttpWebRequest的工作。 如果有人可以得到它与HttpWebRequest的工作了,你会得到答案。
string msg = string.Format("{0}{1}{2}", nonce, clientId, apiKey);
var signature = ByteArrayToString(SignHMACSHA256(apiSecret, StrinToByteArray(msg))).ToUpper();
var path = "https://www.bitstamp.net/api/user_transactions/";
using (WebClient client = new WebClient())
{
byte[] response = client.UploadValues(path, new NameValueCollection()
{
{ "key", apiKey },
{ "signature", signature },
{ "nonce", nonce.ToString()},
});
var str = System.Text.Encoding.Default.GetString(response);
}
因为这与“Web客户端”的工作,没有什么不对的请求,这意味着几乎可以肯定的是,请求被发送回“分块”。 这是由报头“传送编码”表示。
为什么有Web服务器会发送回分块的东西,包括一个事实,即回报是二进制的几个原因。
我来到这个页面,因为提琴手被“干扰”与转向服务器一个非常好的响应,然后返回它分块给我的客户我的要求。 那是因为我有“流”按钮按下或活动。 当它不是时,它发送回缓冲其保留来自服务器的响应中的数据。 这是追查一个可怕的事情..
但研究却告诉我,为什么Content-Length头可能是-1。
解决方案? 请修复服务器(或代理在我的情况)被发送响应回来的路上,或者只是读取响应流进行到底。 后者将返回所有块给你连接,你可以返回的字节的长度。
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
String responseString = reader.ReadToEnd();
int responseLength = responseString.Length;
如果你想字节是更复杂 - 不知道是否有一个阅读器,可以读取到最后 - 二进制读者需要一个缓冲了前面。
一个优雅的方式来消耗BinaryReader在(的所有字节)?
恩乔伊。