C#后台获取网页的接口数据的两种方法 GET POST

本文介绍了使用C#后台获取网页接口数据的两种方法,分别是GET和POST方式。详细讲解了如何设置请求参数、HTTP头信息,并提供了完整的代码示例。

/// <summary>
        /// 获取网页Html,采用Get方式
        /// </summary>
        /// <param name="url">目标地址</param>
        /// <param name="refUrl">Referer地址</param>
        /// <param name="txtCode">文本编码类型</param>
        /// <param name="headers">header集合</param>
        /// <param name="customHeaders">自定义header集合</param>
        /// <returns></returns>
        public static SpiderResponse GetHtmlByGet(string url, string refUrl, Encoding txtCode,
            Dictionary<HttpRequestHeader, string> headers = null, Dictionary<string, string> customHeaders = null)
        {
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => { return true; });

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "GET";
            req.Timeout = SiteBaseConfig.HttpRequetTimeout;
            req.KeepAlive = false;
            if (!string.IsNullOrEmpty(refUrl))
                req.Referer = refUrl;
            if (headers != null)
            {
                foreach (HttpRequestHeader header in headers.Keys)
                {
                    req.Headers.Add(header, headers[header]);
                }
            }
            if (customHeaders != null)
            {
                foreach (string header in customHeaders.Keys)
                {
                    req.Headers.Add(header, customHeaders[header]);
                }
            }

            var result = new SpiderResponse(url);
            HttpWebResponse resp = null;
            try
            {
                resp = (HttpWebResponse)req.GetResponse();

                using (StreamReader sr = new StreamReader(resp.GetResponseStream(), txtCode))
                {
                    result.RespContent = sr.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                result.ReqError(ex);
            }
            finally
            {
                if (resp != null)
                {
                    resp.Close();
                    resp = null;
                }
                req.Abort();
                req = null;
            }
            return result;
        }

 

 

        /// <summary>
        /// 获取网页Html,采用POST方式
        /// </summary>
        /// <param name="url">目标地址</param>
        /// <param name="refUrl">Referer地址</param>
        /// <param name="postContent">post内容</param>
        /// <param name="txtCode">文本编码类型</param>
        /// <param name="contentType">请求内容类型</param>
        /// <param name="headers">标准header集合</param>
        /// <param name="customHeaders">自定义header集合</param>
        /// <param name="timeout">超时时间(缺省为0,代表不设置用Web.Config中配置的超时时间。单位毫秒)</param>
        /// <param name="httpVer">http版本</param>
        /// <returns></returns>
        public static SpiderResponse GetHtmlByPost(string url, string refUrl, string postContent, Encoding txtCode, 
            EHttpContentType contentType = EHttpContentType.KeyValue,Dictionary<HttpRequestHeader, string> headers = null,
            Dictionary<string, string> customHeaders = null, int timeout = 0,Version httpVer = null)
        {
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => { return true; });

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            if (httpVer != null)
                req.ProtocolVersion = httpVer;
            req.Method = "POST";
            if (timeout == 0)
                req.Timeout = SiteBaseConfig.HttpRequetTimeout;
            else
                req.Timeout = timeout;
            req.KeepAlive = false;
            req.ContentType = Utility.GetEnumDescriptionName(contentType);
            if (!string.IsNullOrEmpty(refUrl))
                req.Referer = refUrl;
            if (headers != null)
            {
                foreach (HttpRequestHeader header in headers.Keys)
                {
                    req.Headers.Add(header, headers[header]);
                }
            }
            if (customHeaders != null)
            {
                foreach (string header in customHeaders.Keys)
                {
                    req.Headers.Add(header, customHeaders[header]);
                }
            }

            var result = new SpiderResponse(url, postContent);
            HttpWebResponse resp = null;
            try
            {
                byte[] bs = txtCode.GetBytes(postContent);
                req.ContentLength = bs.Length;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                }

                resp = (HttpWebResponse)req.GetResponse();

                using (StreamReader sr = new StreamReader(resp.GetResponseStream(), txtCode))
                {
                    result.RespContent = sr.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                result.ReqError(ex);
            }
            finally
            {
                if (resp != null)
                {
                    resp.Close();
                    resp = null;
                }
                req.Abort();
                req = null;
            }
            return result;
        }
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值