各位好:
小弟近日在弄一个自己开发的360网盘的客户端,现在使用HttpWebRequest成功的登录、下载与获取网盘文件数据,但是每当需要Post数据去360网站时,Response读入的数据为:{"errno":21013,"errmsg":"\u8bf7\u6c42\u53d1\u9001\u5230\u9519\u8bef\u96c6\u7fa4"}。
而我使用Python,同样的过程,却能够成功,不知道这是为什么?请各位帮帮忙分析一下。万分感谢。
C#代码:
loginurl = "http://c17.yunpan.360.cn/file/list";
            cookieContainer = myHttpWebRequest.CookieContainer;
            myHttpWebRequest = (HttpWebRequest)WebRequest.Create(loginurl);
            //新建一个HttpWebRequest 
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            myHttpWebRequest.Headers["DNT"] = "1";
            myHttpWebRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)";
            myHttpWebRequest.Timeout = 60000;
            myHttpWebRequest.KeepAlive = true;
            myHttpWebRequest.Method = "POST";
            string requestBody = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}",
                HttpUtility.UrlEncode("ajax", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("1", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("order", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("asc", Encoding.GetEncoding("UTF-8")),
                HttpUtility.UrlEncode("page", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("0", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("page_size", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("300", Encoding.GetEncoding("UTF-8")),
                HttpUtility.UrlEncode("path", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("/", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("t", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("0.09739808690089124", Encoding.GetEncoding("UTF-8")),
                HttpUtility.UrlEncode("type", Encoding.GetEncoding("UTF-8")), HttpUtility.UrlEncode("1", Encoding.GetEncoding("UTF-8")));
            //requestBody = "type=2";
            byte[] ComfirmSendBytes = Encoding.GetEncoding("UTF-8").GetBytes(requestBody);
            myHttpWebRequest.ContentLength = ComfirmSendBytes.Count();
            string aaa = Encoding.UTF8.GetString(ComfirmSendBytes);
            //Stream PostStream = myHttpWebRequest.GetRequestStream();            using (Stream stream = myHttpWebRequest.GetRequestStream())
            {
                stream.Write(ComfirmSendBytes, 0, ComfirmSendBytes.Length);
            }             myHttpWebRequest.CookieContainer = cookieContainer;
            myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            //sm = myHttpWebResponse.GetResponseStream();
            StreamReader reader = new StreamReader(myHttpWebResponse.GetResponseStream());
            HtmlRequst = reader.ReadToEnd();[code=csharp][code=csharp][/code][/code]Python源码:
 loginUri=posturl+'/file/list'
        urllib2.install_opener(opener) 
        
        headers = {'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)', 
           'ContentType' : 'application/x-www-form-urlencoded','KeepAlive':'true','Method':'POST'} 
        postData='type=2&t=0.6666859434917569&order=asc&path='+path+'&page=0&page_size=300&ajax=1'
        request = urllib2.Request(loginUri, postData, headers) 
        response = urllib2.urlopen(request) 
        text = response.read()PythonC#

解决方案 »

  1.   

      myHttpWebRequest.ContentLength = ComfirmSendBytes.Count();
    ==>ComfirmSendBytes.Length
      myHttpWebRequest.CookieContainer = cookieContainer;提到
     myHttpWebRequest.Method = "POST";下面HtmlRequst = reader.ReadToEnd();
    ==>string sResult= reader.ReadToEnd();Please try 
      

  2.   

    至少,你的type和ajax参数是颠倒的。另外不需要编码就根本不用编码。
      

  3.   


    谢谢您,找到问题了,携带Cookies的位置应该在getResponse之前完成。
      

  4.   

    擦,点错了,谢谢您,找到问题了,携带Cookies的位置应该在getResponse之前完成。