不知道那位前辈通过HttpWebRequest.Headers.Add添加Content-Range消息成功过
(添加Content-Length也是没反应的)。
昨天搞了一整天,只有通过HttpWebRequest.AddRange添成功过。这个头信息是否受系统保护???
代码如下,前辈帮我看看。            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://62.duote.com/duote_qq.exe");
            request.Headers.Add("Content-Range", "bytes 10-100/28479640");//不希望通过HttpWebRequest.AddRange来添加            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            foreach (string key in response.Headers.AllKeys)
            {
                string str = response.Headers[key];
                byte[] bt = new byte[str.Length];
                for (int i = 0; i < str.Length; ++i)
                {
                    bt[i] = (byte)str[i];
                }                Console.WriteLine("{0}={1}",key , Encoding.GetEncoding("GB2312").GetString(bt));
            }
            Console.ReadLine();
谢谢!!

解决方案 »

  1.   

    HttpWebRequest request = WebRequest.Create("") as HttpWebRequest;
    request.ContentLength = buff.Length;
      

  2.   

    再多给你点代码HttpWebRequest request = WebRequest.Create("http://XXX") as HttpWebRequest;
                    request.Method = "POST";
                    request.Referer = "http://XXX";
                    request.ContentType = "application/x-www-form-urlencoded";
                    byte[] buff = Encoding.Default.GetBytes(data);
                    request.ContentLength = buff.Length;
                    Stream stream = request.GetRequestStream();
                    stream.Write(buff, 0, buff.Length);                string text = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
      

  3.   

    我想问的是添加头信息request.Headers.Add("Content-Range", "bytes 10-100/28479640")
    的问题!!!
      

  4.   

    你填的是相应代码
    下面是请求代码
    request.Headers.Add("Content-Range", "bytes=28479640") 
      

  5.   

    request.Headers.Add("Content-Range", "bytes=0-28479640") 
      

  6.   

    HTTP头中一般断点下载时才用到Range和Content-Range实体头,
    Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300)
    Content-Range用于响应头请求下载整个文件:
    ***********************************
    GET  /test.rar  HTTP/1.1
    Connection:  close
    Host:  116.1.219.219
    Range:  bytes=0-100
    ***********************************
    Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的
    表示头500个字节:bytes=0-499
    表示第二个500字节:bytes=500-999
    表示最后500个字节:bytes=-500
    表示500字节以后的范围:bytes=500-
    第一个和最后一个字节:bytes=0-0,-1
    同时指定几个范围:bytes=500-600,601-999
    一般正常回应
    ***********************************
    HTTP/1.1 206 OK
    Content-Length:  801     
    Content-Type:  application/octet-stream 
    Content-Location: http://www.onlinedown.net/hj_index.htm
    Content-Range:  bytes  0-100/2350 //2350:文件总大小
    Last-Modified: Mon, 16 Feb 2009 16:10:12 GMT
    Accept-Ranges: bytes
    ETag: "d67a4bc5190c91:512"
    Server: Microsoft-IIS/6.0
    Date: Wed, 18 Feb 2009 07:55:26 GMT
    ***********************************
      

  7.   

    我想通过上面的代码添加Range的消息,可是用request.Headers.Add("Content-Range", "bytes 10-100/28479640")添加没反应不希望通过不希望通过HttpWebRequest.AddRange添加(只接受int长度)
      

  8.   

    herojams你会不会写加入Content-Range的代码啊!谢谢!
      

  9.   


    Content-Range是响应头不是请求头
    不要停在Content-Range了,请求数据应该用Range
      

  10.   

    herojams能写个简单的代码例子吗?谢谢
      

  11.   

    Content-Range实体头用于指定整个实体中的一部分的插入位置,也指示了整个实体的长度。
    在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
    如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节
    Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
      

  12.   

    不知道如何把这块消息添进去,就像用HttpWebRequest.AddRange一样
      

  13.   

    Content-Length 
     由 ContentLength 属性设置。
    Range 
     由 AddRange 方法设置。
      

  14.   

    用Socket 想怎么用怎么用 //得到主机信息    IPHostEntry ipInfo=Dns.GetHostByName(hostName);    //取得IPAddress[]    IPAddress[] ipAddr=ipInfo.AddressList;    //得到ip    IPAddress ip=ipAddr[0];    //组合出远程终结点    IPEndPoint hostEP=new IPEndPoint(ip,port);    //创建Socket 实例    Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);    try    {    //尝试连接    socket.Connect(hostEP);    }    catch(Exception se)    {    MessageBox.Show("连接错误"+se.Message,"提示信息    ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);   }   //发送给远程主机的请求内容串   string sendStr="GET / HTTP/1.1\r\nHost: " + hostName +   "\r\nConnection: Close\r\n\r\n";    //创建bytes字节数组以转换发送串    byte[] bytesSendStr=new byte[1024];    //将发送内容字符串转换成字节byte数组    bytesSendStr=Encoding.ASCII.GetBytes(sendStr);   try   {   //向主机发送请求   socket.Send(bytesSendStr,bytesSendStr.Length,0);   }   catch(Exception ce)    {      }    //声明接收返回内容的字符串    string recvStr="";    //声明字节数组,一次接收数据的长度为1024字节    byte[] recvBytes=new byte[1024];    //返回实际接收内容的字节数    int bytes=0;   //循环读取,直到接收完所有数据   while(true)   {   bytes=socket.Receive(recvBytes,recvBytes.Length,0);   //读取完成后退出循环   if(bytes〈=0)   break;   //将读取的字节数转换为字符串   recvStr+=Encoding.ASCII.GetString(recvBytes,0,bytes);   }   //将所读取的字符串转换为字节数组   byte[] content=Encoding.ASCII.GetBytes(recvStr);    try    {    //创建文件流对象实例    FileStream fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);   //写入文件   fs.Write(content,0,content.Length);   }   catch(Exception fe)    {    }    //禁用Socket    socket.Shutdown(SocketShutdown.Both);    //关闭Socket    socket.Close();