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

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

一开始看了今天博客园上的推荐文章,用C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),然后想自己也来采集一下天气,采集目标是腾讯天气。

腾讯天气的数据是用的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

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

C#读取网络流,读取网络上的js文件的更多相关文章

  1. 【Web应用】JAVA网络上传大文件报500错误

    问题描述 当通过 JAVA 网站上传大文件,会报 500 错误. 问题分析 因为 Azure 的 Java 网站都是基于 IIS 转发的,所以我们需要关注 IIS 的文件上传限制以及 requestT ...

  2. 如何将浏览器上的JS文件屏蔽

    在学习自定验证时,需要在页面上进行调试运行结果,这时的JS会影响运行结果的显示,所以我们会将JS代码屏蔽掉,那么我们该如何做呢? 第一步: 在浏览器地址栏输入about:config  点击“我保证会 ...

  3. HTML引入JS文件

    浏览器解析HTML文件时,先判断script 标签中是否有src属性,有则执行指定路径下的JS文件,没有则执行script标签中的js脚本. 1. HTML内嵌JS head里面添加script元素, ...

  4. 上传js,js修改html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度

    网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"開始传输"button.将网络上的大文件先下载下来,下载完毕后,保存到本地. UI效果图例如以下: watermar ...

  6. Linux 上的常用文件传输方式介绍与比较

    ftp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间 ...

  7. Linux上常用的文件传输方式以及比较

    tp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间传 ...

  8. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  9. 转: Linux 上的常用文件传输方式介绍与比较

    from:  https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/ ftp ftp 命令使用文件传输协议(File Transf ...

随机推荐

  1. Memcache知识点梳理

    Memcache知识点梳理 Memcached概念:    Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HAS ...

  2. MySQL 5.6 主从复制如何处理——触发器,函数,存储过程,调度事件

      截图来自MySQL5.6的pdf版文档. 说明: 1)基于语句的复制时,trigger会在slave上执行,所以slave上也需要有trigger的定义,不然会导致主从数据不一致的: 2)基于行的 ...

  3. jqGrid 最常用的属性和事件,供平时参考(转)

    [html] <html> ... <table id="list1"></table> <div id="pager1&quo ...

  4. Java Dom解析的三个实例

    概述 Dom解析的文章已经烂大街了.在这里,只举三个场景下如何编码的例子: xml内有多个同名节点,获取这多个同名节点 已获取到某个节点,生成这个节点的xml描述 修改节点某属性的值 详细的讲解看官请 ...

  5. Linux 多线程编程

    概念 原来指向main()的线程叫做主线程(main thread) 使用pthread_create()创建出来的线程,叫做子线程(child thread) 主/子线程只有在创建时才有区别, 创建 ...

  6. 瘟疫公司中国版(Android)手动破解内购

    前言 洒家近日下载了个瘟疫公司中国版(安卓版)(com.easymobi.plagueinc.mi ,版本 1.1.2(5)(.mi 小米版)),发现游戏需要内购而且价格不菲. 需求 root权限 文 ...

  7. 大话设计模式C++版——抽象工厂模式

    前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...

  8. html5语法

    html5语法沿用html语法,但更简单,更人性化. 一.DOCTYPE及字符编码 DOCTYPE:<!doctype html>或者<!DOCTYPE html>因为html ...

  9. 初识JS正则表达式

    初识JS正则表达式 看到的使用的正则表达式练习:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html PS:本文参考李炎恢JS笔 ...

  10. cookie与session的爱恨情仇

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...