简体   繁体   English

使用HttpWebRequest丢失帖子数据

[英]missing post data by using HttpWebRequest

I got a problem on posting data by using HttpWebRequest . 我在使用HttpWebRequest发布数据时遇到了问题。

There is a string(ie. key1=value1&key2=value2&key3=value3 ) and I have post it to a site (ie. www.*.com/edit), but ,I don't know why that sometimes it's nothing wrong , but sometimes ,the first key=value1 will be missing, only key2=value&key3=value3 that can find in HttpAnalyzer . 有一个字符串(即key1=value1&key2=value2&key3=value3 ),我已将其发布到一个网站(即www。*。com / edit),但是,我不知道为什么有时它没有错,但是有时,第一个key=value1将丢失,只有key2=value&key3=value3可以在HttpAnalyzer找到。

public static string SubmitData(string Url, string FormData, CookieContainer _Cc, string ContentType)
        {
            Stream RequestStream = null, ResponseStream = null; StreamReader Sr = null;
            HttpWebRequest HRequest = (HttpWebRequest)WebRequest.Create(Url);
            try
            {

                HRequest.CookieContainer = _Cc;
                HRequest.Method = "POST";
                HRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                HRequest.ContentType = ContentType;
                HRequest.ContentLength = FormData.Length;
                //byte[] BFromData = new ASCIIEncoding().GetBytes(FormData);
                byte[] BFromData = Encoding.ASCII.GetBytes(FormData);
                BFromData = Encoding.Convert(Encoding.ASCII, Encoding.UTF8, BFromData);//ascii → utf8
                RequestStream = HRequest.GetRequestStream();
                RequestStream.Write(BFromData, 0, BFromData.Length);
                //RequestStream.Write(utf8Bytes,0,utf8Bytes.Length );
                HttpWebResponse HResponse = (HttpWebResponse)HRequest.GetResponse();
                ResponseStream = HResponse.GetResponseStream();
                Sr = new StreamReader(ResponseStream, Encoding.UTF8);
                return Sr.ReadToEnd();
            }
            catch
            {
                return "";
            }
            finally
            {
                if (null != RequestStream) RequestStream.Close();
                if (null != ResponseStream) ResponseStream.Close();
                if (null != Sr) Sr.Close();
            }
        }

Use Fiddler to see how the request looks like when you click on the form then try using this approach and modify what you need for your request. 使用Fiddler查看单击表单时请求的样子,然后尝试使用此方法并修改您的请求所需的内容。

public static void PostDataAndDoSomething()
        {            
            string URI = "http://www.something.com";
            //make your request payload
            string requestBody = String.Format("{{'param1': {0}, 'param2': {1}}}",value1, value2); //json format

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URI);  //make request         

            // set request headers as you need
            request.ContentType = "application/json; charset=UTF-8"; 
            request.Accept = "application/json, text/javascript;
            request.Method = "POST";            
            request.UserAgent = "";
            request.Headers.Add("X-Requested-With", "XMLHttpRequest");
            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
            {
                writer.Write(requestBody); //write your request payload
            }

            WebResponse response = request.GetResponse();          
            string jsonData = String.Empty;

            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                jsonData = reader.ReadToEnd();
            }           
            response.Close();

            //do something with your data, deserialize, Regex etc....
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM