博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#读取网络流,读取网络上的js文件
阅读量:6803 次
发布时间:2019-06-26

本文共 1306 字,大约阅读时间需要 4 分钟。

写博客的目的就是让其他人少走弯路。

C#读取网络上的流和js文件出现的问题

一开始看了今天博客园上的推荐文章,用,然后想自己也来采集一下天气,采集目标是腾讯天气。

腾讯天气的数据是用的js提供的(这里就不多做分析了下次有机会再写文章分析),然而用上文中的GetWebClient方法,传递一个js文件的地址,读取到的是一堆乱码。

 

分析问题产生的原因

问题出现了,自然要分析原因,为什么抓包工具能看到字符串的内容,浏览器也能展示字符串的内容,偏偏用程序不可以呢?

尝试了很多方法,换了很多字符编码依然不行。直到我看到了抓包工具中的这么一段内容,原来传递过来的流是一个bytes。

 

 

 

解决问题

看来原因已经找到了,不是编码的问题,而是流本身的内容是二进制内容,直接转string肯定是乱码不对了,所以我们要把stream转成bytes才行。

然后就开始网上搜索对应的内容,然后再踩一个坑。

在使用 int l = stream.Length; 的时候碰到了“此流不支持查找操作”的错误。

这个错误的产生原因本质是网络流没法提前获取到长度,所以这个类不支持查找操作通常是网络流导致的。

然后再继续搜索这个错误的解决方法,然后找到了同样碰到这个问题的前辈,详见:http://bbs.csdn.net/topics/340175313

这里就感谢这位前辈了,很多人在网上提问,没人回答,后来自己解决了问题就算了,没想到回到自己的帖子里去自问自答一下,其实这样自问自答一下可以帮助更多的后面的人!!!

最后我用了如下的方法解决了这个问题

public static byte[] ReturnStrem(string url)    {        string Url = url;        byte[] data1 = null;        MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();        _xmlhttp.open("GET", Url, false, null, null);        _xmlhttp.send(null);        if (_xmlhttp.readyState == 4)        {            data1 = (byte[])_xmlhttp.responseBody;        }        _xmlhttp.abort();        return data1;

  对于新手来说,这里复制了代码又出现了新的问题,我这里一并解释清楚吧。

首先MSXML2是要引用什么?

答:项目右键--引用--COM--Microsoft XML 3.0

引用后直接执行报错“无法嵌入互操作类型”,怎么办?

答:项目--引用--找到MSXML2右键属性,嵌入互操作类型设置为false

 

最后问题圆满解决,解决这个问题花了一下午时间,希望我踩的坑能给其他人节省更多的时间。

 

转载于:https://www.cnblogs.com/JangoJing/p/4773712.html

你可能感兴趣的文章
李开复:人工智能对人类真正的威胁是什么?
查看>>
CentOS 6.*/7 防火墙放行端口
查看>>
docker pipework 实现跨宿主主机容器互联
查看>>
Hutool之正则表达式工具类——ReUtil
查看>>
execute、executeQuery和executeUpdate之间的区别
查看>>
Windows及Apache Struts2 高危漏洞安全公告及解决方案
查看>>
企业网站建设,手机网站建设,专业的网站建设,网站建网站建设企业,网页建设与制作...
查看>>
您如何创建AWS图表?
查看>>
iOS多线程编程
查看>>
HTTP参数中Etag的重要性
查看>>
T-MBA·沟通·倾听·V1 | 7天学习倾听,6月14日开营,包学会!
查看>>
java架构程序员月入破3万到底是怎么炼成的,一篇文章让你了解
查看>>
mongoDB JAVA操作
查看>>
python基础进阶
查看>>
高级GLSL
查看>>
【27】非阻塞算法
查看>>
cacti 安装
查看>>
云计算(PAAS)领域开始火爆的 Docker 到底是什么?
查看>>
PXE网络装机(有人值守与无人值守)
查看>>
python 爬虫 cookie 的保存和加载
查看>>