C#读取网络流,读取网络上的js文件
写博客的目的就是让其他人少走弯路。
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文件的更多相关文章
- 【Web应用】JAVA网络上传大文件报500错误
问题描述 当通过 JAVA 网站上传大文件,会报 500 错误. 问题分析 因为 Azure 的 Java 网站都是基于 IIS 转发的,所以我们需要关注 IIS 的文件上传限制以及 requestT ...
- 如何将浏览器上的JS文件屏蔽
在学习自定验证时,需要在页面上进行调试运行结果,这时的JS会影响运行结果的显示,所以我们会将JS代码屏蔽掉,那么我们该如何做呢? 第一步: 在浏览器地址栏输入about:config 点击“我保证会 ...
- HTML引入JS文件
浏览器解析HTML文件时,先判断script 标签中是否有src属性,有则执行指定路径下的JS文件,没有则执行script标签中的js脚本. 1. HTML内嵌JS head里面添加script元素, ...
- 上传js,js修改html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度
网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"開始传输"button.将网络上的大文件先下载下来,下载完毕后,保存到本地. UI效果图例如以下: watermar ...
- Linux 上的常用文件传输方式介绍与比较
ftp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间 ...
- Linux上常用的文件传输方式以及比较
tp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输. FTP 协议允许数据在不同文件系统的主机之间传 ...
- 向linux服务器上传下载文件方式收集
向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...
- 转: Linux 上的常用文件传输方式介绍与比较
from: https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/ ftp ftp 命令使用文件传输协议(File Transf ...
随机推荐
- ORACLE 10升级到10.2.0.5 Patch Set遇到的内核参数检测失败问题
在测试ORACLE 10.2.0.4升级到10.2.0.5 Patch Set的过程中,遇到一个内核参数检查失败的问题,具体错误信息如下所示 实验环境: 操作系统:Oracle Linux Ser ...
- java 生成和解析二维码
public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...
- SQL Server:服务器角色
角色 描述 sysadmin 执行SQL Server中的任何动作 serveradmin 配置服务器设置 setupadmin 安装复制和管理扩展过程 securityadmin 管理登录和CREA ...
- tomcat常用配置
一. 增加内存,防止JVM内存溢出 1. 以服务的方式启动时 进入"tomcat安装路径\bin"目录下,打开service.bat文件,找到"--JvmOptions ...
- ARM体系结构
工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...
- 几种语言的CGI编程
为了了解PHP.JSP.ASP出现之前人们写网站的方法,洒家研究了一波CGI,使用C.Python.batch.shell script语言写了几个简单的网页. CGI即通用网关接口,指web服务器调 ...
- Linux 下从头再走 GTK+-3.0 (三)
之前我们为窗口添加了一个按钮,接下来让这个按钮丰富一点.并给窗口加上图标. 首先创建 example3,c 的源文件. #include <gtk/gtk.h> static void a ...
- u3d_shader_surface_shader_6
主题:1.膨胀效果:2.surface shader实际生成的代码: o(︶︿︶)o 粘贴复制代码易,理解透彻代码难... 一:膨胀效果 1.在#pragma 编译指令里添加vertex:vert以 ...
- session跨域和ajax跨域名
后台跨域和ajax跨域名: 后台跨域: www.baidu.com 主域名(一级域名一般以www开头) news.baidu.com 二级域名 (a.test.com和b.test.com有相 ...
- java 22 - 10 多线程之两种代码实现方式的比较与区别