Web爬去的C#请求发送

public class HttpControler
    {
        //post请求发送
        private Encoding m_Encoding = Encoding.GetEncoding("gb2312");
        public string Request(string strUrl,string postStr)
        {
            HttpWebRequest tHWRq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
            tHWRq.CookieContainer = new CookieContainer();
            CookieContainer cookie = tHWRq.CookieContainer;//如果用不到Cookie,删去即可
            //以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链
            tHWRq.Referer = "http://www.cninfo.com.cn/cninfo-new/announcement/show";
            tHWRq.Accept = "application/json, text/javascript, */*; q=0.01";
            tHWRq.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
            //tHWRq.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
            tHWRq.Headers["Accept-Encoding"] = "gzip, deflate";
            tHWRq.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0";
            tHWRq.KeepAlive = true;
            //上面的http头看情况而定,但是下面俩必须加
            tHWRq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            tHWRq.Method = "POST";
            tHWRq.Timeout = 600 * 1000;

            Encoding encoding = Encoding.UTF8;//根据网站的编码自定义  

            byte[] postData = encoding.GetBytes(postStr);//postDataStr即为发送的数据,格式还是和上次说的一样 

            try
            {
                tHWRq.ContentLength = postData.Length;
                Stream requestStream = tHWRq.GetRequestStream();
                requestStream.Write(postData, 0, postData.Length);
                requestStream.Close();
                using (HttpWebResponse tHWRp = (HttpWebResponse)tHWRq.GetResponse())
                {
                    using (Stream tStreamRp = tHWRp.GetResponseStream())
                    {
                        using (StreamReader tSR = new StreamReader(tStreamRp, m_Encoding))
                        {
                            string result = tSR.ReadToEnd();
                            tHWRq.Abort();
                            return result;//请求响应后返回的内容
                        }
                    }
                }
            }
            catch (Exception e)
            {
                try
                {
                    tHWRq.Abort();
                }
                catch (Exception err)
                {
                    throw err;
                }
                return "NoUrl";
            }

        }

        //Get请求发送
        public bool RequestCode(string strUrl,string path)
        {
            HttpWebRequest tHWRq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
            tHWRq.CookieContainer = new CookieContainer();
            CookieContainer cookie = tHWRq.CookieContainer;//如果用不到Cookie,删去即可
            //以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链
            tHWRq.Referer = "http://www.cninfo.com.cn/cninfo-new/announcement/show";
            tHWRq.Accept = "application/json, text/javascript, */*; q=0.01";
            tHWRq.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
            tHWRq.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
            tHWRq.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0";
            tHWRq.KeepAlive = true;
            //上面的http头看情况而定,但是下面俩必须加
            tHWRq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            tHWRq.Method = "GET";
            tHWRq.Timeout = 600 * 1000;
            string result = null;
            try
            {
                using (HttpWebResponse tHWRp = (HttpWebResponse)tHWRq.GetResponse())
                {
                    using (Stream tStreamRp = tHWRp.GetResponseStream())
                    {
                        using (StreamReader tSR = new StreamReader(tStreamRp))
                        {
                            result = tSR.ReadToEnd();
                        }
                    }
                }
                //正则表达式过滤想要的内容
                string patternCode = "\"code\":\"\\d{6,}\"";
                List<string> lstCode = new List<string>();
                Regex rgxUrl = new Regex(patternCode, RegexOptions.IgnoreCase);
                MatchCollection matches = rgxUrl.Matches(result);
                if (matches.Count > 0)
                {
                    foreach (Match matPage in matches)
                    {
                        string codeItem = matPage.Value;
                        if (!string.IsNullOrEmpty(codeItem))
                        {
                            string code = codeItem.Substring(codeItem.IndexOf(":") + 1);
                            lstCode.Add(code);
                        }
                    }
                } 

                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        foreach (string code in lstCode)
                        {
                            sw.WriteLine(code);
                        }

                    }
                }
                tHWRq.Abort();
                return true;
            }
            catch (Exception e)
            {
                try
                {
                    tHWRq.Abort();
                }
                catch (Exception err)
                {
                    throw err;
                }
                return false;
            }
        }
    }
时间: 2024-12-24 17:33:15

Web爬去的C#请求发送的相关文章

python简单爬去油价信息发送到公众号

基于这段时间广州的油价变化的比较大,所以我自己查看油价的网站也增多了,但是作为一个Programmer来说这不是侮辱吗??能用代码实现的为什么要用人力呢???所以就自己做了一个简单的爬去油价信息的python脚本,后来发现执行脚本还是比较麻烦,就定期每天爬去信息发送到对应的公众号上!话不多说,直接上脚本. (env1) ?  python_scripts cat youjia_wechat.py #!/usr/bin/python #-*- coding:utf-8 -*- #__author_

Golang Web编程的Get和Post请求发送与解析

本文的是一篇入门文章,通过一个简单的例子介绍Golang的Web编程主要用到的技术. 文章结构包括: Client-Get 请求 Client-Post 请求 Server 处理 Get 和 Post 数据 在数据的封装中,我们部分采用了json,因而本文也涉及到Golang中json的编码和解码. 一.Client-Get package main import ( "fmt" "net/url" "net/http" "io/iou

python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件

# settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' 一丶scrapy的图片数据爬取(流数据的爬取) ? scrapy中封装好了一个管道类(ImagesPipeline),基于该管道类可以实现图片资源的请求和持久化存储 编码流程: 爬虫文件中解析出图片的地址 将

自己实现简单Web服务器,支持GET POST请求

最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提供的HttpListener类实现对Http协议的处理,实现简单的web服务器. 注意:此类在 .NET Framework 2.0 版中是新增的.所以支持.NET Framework 2.0以上版本.该类仅在运行 Windows XP SP2 或 Windows Server 2003 操作系统的

一个http请求发送到后端的详细过程

我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切. 首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范. 1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号.

基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特别各种APP万花齐放的今天,API的跨域请求是不能避免的. 在默认情况下,为了防止CSRF跨站的伪造攻击(或者是 javascript的同源策略(Same-Origin Policy)),一个网页从另外一个域获取数据时就会收到限制.有一些方法可以突破这个限制,那就是大家熟知的JSONP, 当然这只是

【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据

注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. 5.2 Sending HTML Form Data 5.2 发送HTML表单数据 本文引自:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1 By Mike Wasson|June 15, 2012 作者:Mike Wasson | 日期:2012-6-15 Part

php模拟post请求发送文件

由于项目需要,需要本地服务器接收数据后,再将数据转发到另外一台服务器上,故要用到模拟post请求发送数据,当然数据中也包含文件流. curl是php比较常用的方式之一,一般代码如下: $params1 = "test"; $params2 = "@".$absolute_path;//如果是文件 则参数为"@"+绝对路径 $post_data = array( 'params1' => $params1, 'params2' => $

PHP:6种GET和POST请求发送方法

PHP:6种GET和POST请求发送方法 在i94web博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全. 无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库.对于多说,请求的格式如下: // 获取评论次数,参数是文章ID function getCommCount($postid) { $jsondata = file_get_contents("http://api.duoshuo.com/threads/counts.json?short_name