C#Post常用功能

在某些网站没有会发生"远程服务器返回错误: (403) 已禁止。"错误

则要加上request.userAgent属性


HttpWebRequest request = null;       //提交

HttpWebResponse response = null;    //返回

Request.Method = "POST";//数据提交方式

request.Host = "user.51sole.com";   //提交网址前缀

request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";  //提交的值编码形式

request.Headers.Add("Cookie:lang=zh-cn;" )  //手动添加提交cookie值

Request.AllowAutoRedirect = false;   // 是否需要自动跳转


//如果是GET设置好提交头,和必要cookie返回数据即可

            response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

            string content = sr.ReadToEnd();    //返回response数据

            sr.Close();

                if (response != null)
                {
                    response.Close();
                    response = null;
                }
                request.Abort();
                request= null;



如果是post,提交参数:

            string postdata = "ProductName=咸丰重宝拍卖行情一路看涨&ProductID=0";//模拟请求数据
            //提交请求  
            byte[] postdatabytes = Encoding.UTF8.GetBytes(postdata);
            request.ContentLength = postdatabytes.Length;
            using (Stream stream = request.GetRequestStream())
            {
                //设置POST 数据
                stream.Write(postdatabytes, 0, postdatabytes.Length);
                stream.Close();
            }
            response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

            string content = sr.ReadToEnd();    //返回response

            sr.Close();

                if (response != null)
                {
                    response.Close();
                    response = null;
                }
                request.Abort();
                request= null;




常用参数Post封装:

        public static string Post(string url, Dictionary<object, object> param)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.UserAgent = "RK_C# 1.1";
            //request.Timeout = 30000;   //连接超时


            #region POST方法


            //如果需要POST数据  
            if (!(param == null || param.Count == 0))
            {
                StringBuilder buffer = new StringBuilder();
                int i = 0;
                foreach (string key in param.Keys)
                {
                    if (i > 0)
                    {
                        buffer.AppendFormat("&{0}={1}", key, param[key]);
                    }
                    else
                    {
                        buffer.AppendFormat("{0}={1}", key, param[key]);
                    }
                    i++;
                }


                byte[] data = System.Text.Encoding.UTF8.GetBytes(buffer.ToString());
                try
                {
                    using (Stream stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }
                catch {
                    return "无法连接.请检查网络.";
                }


            }


常用参数Post调用:

                var param = new Dictionary<object, object>
                        {
                            {"username","a1003434346"},
                            {"password","a2912695"},
                            {"typeid","5000"},
                            {"timeout","90"},
                            {"softid","102925"},
                            {"softkey","af8b9ca0addc4e0d8096891cc8466b5e"}
                        };


                string httpResult = Post("http://api.ruokuai.com/create.xml", param, data);



带图片Post封装:

        /// <summary>
        /// HTTP POST方式请求数据(带图片)
        /// </summary>
        /// <param name="url">URL</param>        
        /// <param name="param">POST的数据</param>
        /// <param name="fileByte">图片Byte</param>
        /// <returns></returns>
        public static string Post(string url, IDictionary<object, object> param, byte[] fileByte)
        {
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");


            HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
            wr.ContentType = "multipart/form-data; boundary=" + boundary;
            wr.UserAgent = "RK_C# 1.2";
            wr.Method = "POST";


            //wr.Timeout = 150000;
            //wr.KeepAlive = true;


            //wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
            Stream rs = null;
            try
            {
                rs = wr.GetRequestStream();
            }
            catch { return "无法连接.请检查网络."; }
            string responseStr = null;


            string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
            foreach (string key in param.Keys)
            {
                rs.Write(boundarybytes, 0, boundarybytes.Length);
                string formitem = string.Format(formdataTemplate, key, param[key]);
                byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
                rs.Write(formitembytes, 0, formitembytes.Length);
            }
            rs.Write(boundarybytes, 0, boundarybytes.Length);


            string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
            string header = string.Format(headerTemplate, "image", "i.gif", "image/gif");//image/jpeg
            byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
            rs.Write(headerbytes, 0, headerbytes.Length);


            rs.Write(fileByte, 0, fileByte.Length);


            byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--");
            rs.Write(trailer, 0, trailer.Length);
            rs.Close();


            WebResponse wresp = null;
            try
            {
                wresp = wr.GetResponse();


                Stream stream2 = wresp.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);
                responseStr = reader2.ReadToEnd();


            }
            catch
            {
                //throw;
            }
            finally
            {
                if (wresp != null)
                {
                    wresp.Close();
                    wresp = null;
                }
                wr.Abort();
                wr = null;


            }
            return responseStr;

        }


带图片调用:

                byte[] data;
                //把Image转换为byte
                using (MemoryStream ms = new MemoryStream())
                {
                    img.Save(ms, img.RawFormat);
                    ms.Position = 0;
                    data = new byte[ms.Length];
                    ms.Read(data, 0, Convert.ToInt32(ms.Length));
                    ms.Flush();
                }

                var param = new Dictionary<object, object>
                        {
                            {"username","a1003434346"},
                            {"password","a2912695"},
                            {"typeid","5000"},
                            {"timeout","90"},
                            {"softid","102925"},
                            {"softkey","af8b9ca0addc4e0d8096891cc8466b5e"}
                        };


                string httpResult = Post("http://api.ruokuai.com/create.xml", param, data);


未完待续...

猜你喜欢

转载自blog.csdn.net/a1003434346/article/details/80258157