C# 网络信息获取

news2025/1/9 14:48:29

一 网络信息浏览

1 HTTP协议

2 客户端与服务器

3 Request与Response

4 Stream

5 Get与Post

在这里插入图片描述

二 一些查看工具

1 Fiddler2

http://www.fidddler2.com

2 其他工具

如NetworkMoniter、Visula Sniffer、httpwatch、WireShark

3 Chrom/FireFox等浏览器F12

① Chrome 中按F12,或点右键,“审查元素”;
② FireFox中安装FireBug;

三 使用System.Web

① System.Web提供支持浏览器/服务器通讯的类和接口。
② 此命名空间包括提供有关当前HTTP请求的大量信息的Request类,管理HTTP到客户端的输出Response类,以及提供对服务器端实用工具和进程的访问的HttpServerUtility对象。
③ System.Web还包括用于Cookie操作、文件传输、异常信息和输出缓存控制的类。

四 WebClient类

1 DownloadData及DownloadFile

① 后来又有DownloadStriing;
② UploadData及UploadFile;
③ OpenRead及OpenWrite;

2 示例:WebClientDownload.cs

① string url=@“http://www.baidu.com”;
② WebClient client=new WebClient();
③ byte[] pageData=client.DownloadData(url);
④ string pageHtml=Encoding.Default.GetString(pageData);
⑤ Console.WriteLine(pageHtml);

3 WebRequest及WebResponse

① WebRequest myRequest=
WebRequest.Create(“http://www.contoso.com”);
② WebResponse myREsponse=myRequest.GetResponse();
③ Stream requestStream =myRequest.GetRequestStream();
④ Stream receiveStream=myWebResponse.GetResponseStream();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace 使用WebClient
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string url = @"https://localhost/test.html";
            WebClient client = new WebClient();
            byte[] pageData = client.DownloadData(url);
            string pageHtml = Encoding.Default.GetString(pageData);
            Console.WriteLine(pageHtml);
            Console.ReadKey();
        }
    }
}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace DownloadString
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string url = "https://www.baidu.com";
            if (args.Length != 0)
                url = args[0];

            string str = DownloadString(url);

            Console.WriteLine(str);
            Console.ReadKey();
        }

        public static string DownloadString(string url)
        {
            try
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;

                Stream responseStream = response.GetResponseStream();
                Encoding encoding = Encoding.UTF8;
                StreamReader reader = new StreamReader(responseStream, encoding);
                string str = reader.ReadToEnd();
                reader.Close();
                responseStream.Close();
                response.Close();
                return str;
            }
            catch(UriFormatException exception)
            {
                Console.WriteLine(exception.Message.ToString());
                Console.WriteLine("Invalid URL format.Please use https://www.yoursite.com");
            }
            catch(WebException exception2)
            {
                Console.WriteLine(exception2.Message.ToString());
            }
            return "";
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace 猜字符的编码
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string url = "https://www.pku.edu.cn";
            if (args.Length != 0)
                url = args[0];
            string str = DownloadString(url);
            Console.WriteLine(str);
            Console.ReadKey();
        }

        public static string DownloadString(string url)
        {
            string html = "";

            try
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;

                Stream responseStream = response.GetResponseStream();

                Encoding encoding = GuessDownloadEncoding(response);//用这个编码更好
                if (encoding != null)
                {
                    StreamReader reader = new StreamReader(responseStream, encoding);
                    html = reader.ReadToEnd();
                    reader.Close();
                }
                else
                {
                    byte[] htmlByte = GetByteContent(responseStream);
                    html = Encoding.GetEncoding("utf-8").GetString(htmlByte);

                    string reg_charset = "(<meta[^>]*charset=(?<charset>[^>'\"]*)[\\s\\S]*?>)|(xml[^>]+encoding=(\"|')*(?<charset>[^>'\"]*)[\\s\\S]*?>)";

                    Regex r = new Regex(reg_charset, RegexOptions.IgnoreCase);
                    Match m = r.Match(html);
                    string encodingName = (m.Captures.Count != 0) ? m.Result("${charset}") : "";
                    Console.WriteLine(encodingName);
                    if (encodingName != "")
                    {
                        html = Encoding.GetEncoding(encodingName).GetString(htmlByte);
                    }
                }
                responseStream.Close();
                response.Close();
            }
            catch (UriFormatException exception)
            {
                Console.WriteLine(exception.Message.ToString());
            }
            catch (WebException exception2)
            {
                Console.WriteLine(exception2.Message.ToString());
            }
            return html;
        }

        private static byte[] GetByteContent(Stream stream)
        {
            ArrayList arBuffer = new ArrayList();

            byte[] buffer = new byte[1024];
            int offset = 1024;
            int count = stream.Read(buffer, 0, offset);
            while(count>0)
            {
                for(int i=0;i<count;i++)
                {
                    arBuffer.Add(buffer[i]);
                }
                count = stream.Read(buffer, 0, offset);
            }

            return (byte[])arBuffer.ToArray(typeof(byte));
        }

        private static Encoding GuessDownloadEncoding(HttpWebResponse response)
        {
            string charset = GetCharSet(response.ContentType);
            if (charset == "")
                charset = GetCharSet(response.Headers["Content-Type"]);

            try
            {
                if (charset != "")
                    return Encoding.GetEncoding(charset);
            }
            catch { }
            return null;
        }

        private static string GetCharSet(string contentType)
        {
            Console.WriteLine("contentType:" + contentType);

            if (contentType == null | contentType == "")
                return "";

            string[] strArray = contentType.ToLower().Split(new char[] { ',', '=', ' ' });
            bool flag = false;
            foreach(string str2 in strArray)
            {
                if(str2=="charset")
                {
                    flag = true;

                }
                else if(flag)
                {
                    return str2;
                }
            }
            return "";
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace 下载网页中的所有图片
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string pattern = @"(<)(.[^<]*)((src|href)=)('|""| )?(?<fileUrl>(.[^'|\s|""]*)(\.)(jpg|gif|png|bmp|jpeg|swf))('|""|\s|>)(.[^>]*)(>)";
            string pageUrl = @"https://www.pku.edu.cn/";

            if(args!=null&&args.Length>0)
            {
                pageUrl = args[0];
            }

            pageUrl = pageUrl.Replace('\\', '/');
            int p = pageUrl.LastIndexOf('/');
            string urlPath = pageUrl.Substring(0, p + 1);
            int ph = pageUrl.IndexOf('/', pageUrl.IndexOf('/') + 2);
            string urlHost = pageUrl.Substring(0, ph);

            string pageContent = DownOnePage(pageUrl);
            Console.WriteLine(pageContent);

            Regex rx = new Regex(pattern, RegexOptions.IgnoreCase);

            MatchCollection mc = rx.Matches(pageContent);
            Console.WriteLine("有{0}次匹配", mc.Count);
            foreach(Match mt in mc)
            {
                string fileUrl = mt.Result("${fileUrl}");

                fileUrl = fileUrl.Replace('\\', '/');
                if(fileUrl.IndexOf(':')<0)//它不包含协议名
                {
                    if (fileUrl[0] == '/')//它是绝对路径
                        fileUrl = urlHost + fileUrl;
                    else//相对路径
                        fileUrl = urlPath + fileUrl;
                }

                Console.WriteLine(fileUrl);

                int p2 = fileUrl.LastIndexOf('/');

                string fileName = fileUrl.Substring(p2 + 1);

                DownOneFile(fileUrl, fileName);

                Console.ReadKey();
            }
        }

        static void DownOneFile(string url,string fileName)
        {
            WebClient client = new WebClient();

            client.DownloadFile(url, fileName);
        }

        static string DownOnePage(string url)
        {
            WebClient client = new WebClient();

            byte[] pageData = client.DownloadData(url);

            string pageHtml = Encoding.UTF8.GetString(pageData);

            return pageHtml;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泛微齐业成,一文告诉你如何实现全程数字化的预算管理

新一代全程数字化费控管理软件-齐业成预算管理&#xff0c;实现从预算建模、预算编制、预算审批、预算管控、预算变更、预算分析、预算考评的全程数字化管理。 随着数字经济和数字社会的高速发展&#xff0c;预算管理已成为组织内部最重要的经营管理活动之一&#xff0c;其过程…

MySQL窗口函数 和 阿里云日志留存率统计脚本实现

窗口函数的官方描述&#xff1a;窗口函数对一组查询行执行类似聚合的操作。但是&#xff0c;虽然聚合操作将查询行分组为单个结果行&#xff0c;但窗口函数会为每个查询行生成一个结果&#xff0c;发生函数评估的行称为当前行&#xff0c;与发生函数评估的当前行相关的查询行构…

docker镜像导出和导入

1.容器镜像导出 我们先通过docker images查看需要导出的镜像 然后我们使用镜像导出命令 docker save -o /home/备份包名.tar 镜像id或镜像名 # -o(即output) 或 > 表示输出到文件备份镜像可以同时备份多个&#xff0c;空格分隔&#xff0c;这里建议使用镜像名备份&#xff…

DeepMind:用 GNN 学习通用推理算法

文 | 智商掉了一地小孩子才做选择&#xff0c;我的模型全&#xff01;都&#xff01;要&#xff01;近年来&#xff0c;基于深度神经网络的机器学习系统取得了巨大进步&#xff0c;尤其是在以感知为主的任务上。这一领域表现突出的模型通常要在分布中进行泛化&#xff0c;意味着…

Keras深度学习实战(43)——深度Q学习算法

Keras深度学习实战&#xff08;43&#xff09;——深度Q学习算法0. 前言1. Q 学习简介2. 使用 Q 学习进行 FrozenLake 游戏2.1 FrozenLake 环境分析2.2 模型分析2.3 使用 Q 学习算法解决 FrozenLake 问题3. 使用深度 Q 学习进行 CartPole 游戏3.1 问题分析3.2 模型分析3.3 使用…

通讯录怎么恢复?在 手机上检索找回已删除的电话号码的3种方式

不幸的是&#xff0c;我从手机中删除了一些号码&#xff0c;因此它也从帐户中删除了。我想恢复它们或将我的帐户恢复到一周前我拥有这些号码的日期。— 来自 Android 用户 像上述用户一样&#xff0c;您可能已经删除了一些电话号码&#xff0c;但希望有一天能恢复它们。这种事故…

python数据分析及可视化(十八)Power BI(数据获取、整理、清洗以及可视化、Power Query的基本操作、删除及增加列)

Power BI 微软推出的数据分析和可视化工具&#xff0c;用于在组织中提供见解&#xff0c;是商业分析工具&#xff0c;让视觉对象分析触手可及&#xff0c;可以创建交互式数据可视化效果和报表&#xff0c;连接数百个数据源、简化、准备数据等&#xff0c;并提供相应的分析&…

虚拟机Ubuntu设置固定IP与主机相互通讯

虚拟机Ubuntu设置固定IP与主机相互通讯1. 写在最前1.1 最好了解的预备知识1.2 虚拟机与主机三种连接方式1.3 写在最前2. VMware 虚拟机Ubuntu系统与主机共享IP2.1 配置VMware桥接网卡2.2 设置虚拟机为固定IP2.3 Vmware 虚拟机与主机互相通讯3. VirtualBox虚拟机Ubuntu系统与主机…

ContrastMask: Contrastive Learning to Segment Every Thing

摘要 部分监督实例分割是一种通过学习有限的base类和带注释的掩码来从novel类别中分割对象的任务&#xff0c;从而消除了沉重的注释负担。解决这一问题的关键是建立一个有效的类不可知掩码分割模型。与以前只在base类别上学习此类模型的方法不同&#xff0c;在本文中&#xff…

Nginx root 以及alias差别

1. 前言 今天的目的主要是梳理下在 nginx 中 root 以及 alias 在用法上有什么不同。其实这个问题看起来很简单。但是对于前端同学而言还是很困难的&#xff0c;毕竟有的前端同学都没弄过服务器 2. 结论 root 以及 alias 都是对 url 发起根目录进行控制。但是颗粒度有所不同roo…

【深基18.例3】查找文献(C++,图的遍历)

题目描述 小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个&#xff08;也有可能没有&#xff09;参考文献的链接指向别的博客文章。小K 求知欲旺盛&#xff0c;如果他看了某篇文章&#xff0c;那么他一定会去看这篇文章的参考文献&#xff08;如果他之前已经看过这篇参…

JavaScript 中如何代理 Set(集合) 和 Map(映射)

ECMAScript6 中 Set 和 Map 的代理方法上一节&#xff1a;《JavaScript 中如何代理数组 》| 下一节&#xff1a;《JavaScript 中的反射&#xff08;Reflect&#xff09;原理与应用 》今日正在编写中&#xff0c;未完待续… jcLee95 邮箱 &#xff1a;291148484163.com CSDN…

Git分支操作

实操记录 假定非管理人员操作&#xff1a; 直推&#xff1a; 新建特性分支cbry&#xff1a; 刷新分支&#xff1a; checkout切换&#xff1a; 本地文件查看&#xff1a; 再merge&#xff1a; 就此&#xff0c;master的代码就合并到特性分支cbry&#xff1a; 新增内容&#xff…

数字化技术转型

这篇老生常谈&#xff08;我写过N次&#xff09;&#xff0c;是应一位IM群中的朋友的困惑问答汇集而成的。&#xff08;1&#xff09;学科分类我上学学的是计算机系。我上的大学一开始并没有计算机系&#xff0c;后来是电子工程系和数学系的老师抽调组成了计算机系。后来&#…

申请大学用的是IB预估分?

IB课程体系以其独特的优越性成为越来越多国际高中生的选择。如今全球共有3300多所高校接受IB成绩申请&#xff0c;其中包括美国常春藤盟校、英国G5在内的多所名校。 但是&#xff0c;大家知道吗&#xff0c;国内学习IB课程的学生是需要用预估分来申请大学的。今天&#xff0c;小…

多用户及时通信系统

目录1. QQ用户登录1.1 用户登录11.2 用户登录21.3 用户登录32. 拉取在线用户3. 无异常退出4. 私聊系统5. 群聊3. 发送文件3.1 服务端推送新闻3.2 离线留言和离线发文件1. QQ用户登录 1.1 用户登录1 qqcommon包下 User类序列化 Message消息类序列化 MessType接口 qqclient.ut…

拉伯杠杆平台|沪指上涨,大金融板块领涨,有股票连续5涨停!

A股周二上午全体小幅上涨&#xff0c;大金融集体上涨&#xff0c;推动指数上行&#xff0c;商场全体动摇不大。A50期货高开高走&#xff0c;盘中暴拉超2.6%。 不过&#xff0c;部分个股仍然动摇不小&#xff0c;有多只股票接连涨停。 别的&#xff0c;新股持续分解&#xff0c…

ATAC-seq分析:数据介绍(2)

1. 简介 ATACseq (Assay for Transposase-Accessible Chromatin using sequencing) 使用转座酶在测序前有效地片段化可访问的 DNA&#xff08;DNA可极性&#xff09;。结果提供了一种绘制可访问/开放染色质基因组范围的方法。 与其他技术相比&#xff0c;ATACseq 有几个优点&am…

嵌入式开发学习之--串口通讯(下)

提示&#xff1a;本篇来做一个关于串口的输入输出实验。 文章目录前言一、项目概况1.1、项目需求1.2、项目来源1.3、开发环境1.4、项目意义1.5、项目效果展示二、开发步骤2.1、涉及硬件电路2.2、项目代码2.2.1、串口配置总结前言 前一篇文章我们介绍了串口的几种类型以及串口标…

Linux Shell 编程,运算符,条件与分支,循环

Linux Shell 编程&#xff0c;运算符&#xff0c;条件与分支&#xff0c;循环1.Shell运算符2.判断语句3.for循环4.while循环1.Shell运算符 学习如何在shell中进行各种运算操作 案例&#xff1a;计算&#xff08;57&#xff09;3的值&#xff1a; #!/bin/bash res$(((57)*3)) …