html源码中的反斜杠,【未解决】为何C#中访问Skydrive返回的html源码中包含这么多反斜杠零(\0)...

【问题】

通过浏览器等访问https://skydrive.live.com/或https://skydrive.live.com/?cid=9a8b8bf501a38a36之类的地址,

返回的应该是80KB左右的html源码,其中包括primeResponse部分的json源码的。

此处出的问题是,在C#,不论是非登录模式还是登录模式,

(登录模式就是,之前已经用用户名和密码登录了skydrive,然后再去访问对应的skydrive上的页面)

中的html源码,都会包含除了所期望的html源码之外,源码中会有大量(后经证实是2048046个)的反斜杠零(\0)字符。

所以一共获得html的源码大小就是2MB多了,严重影响了网页访问效率。

想要搞懂,为何会出现这样的问题。

【解决过程】

1.之前在这里:【经验总结】用C#实现模拟登陆Skydrive网站的分析的全过程,就已经提到了此问题。之前就没解决。最近虽然也没解决,但是对于问题的现象,有了更多的了解:经过调试发现是在获取对应http的response的stream中,某个readLine,所获得的内容,不是html源码,正是那个2048046个\0。

2.后又经过调试证实:

就是对应读取返回的html源码的时候:

对于访问skydrive来说,

非登录模式下,返回的html源码中,239行一定是对应的2048046的字节的\0

而登录模式下,返回的html源码中,245行一定是对应的2048046的字节的\0

此处\0即字符串结束的那个\0,所以调试过程中,把此获得的html赋值给一个TexBox的Text,

结果显示出来的内容,就会出现,只是前半部分,截止到\0的那部分,以及2048046个字节的\0,和后面的html源码,都没法显示出来了。

下面是可以规避掉,该readLine所读出的垃圾数据\0的代码:// read responsed html for skydrive url response

// for skydrive seems can not read normally, so need special process here

private string getSkydriveRespHtml(ref HttpWebResponse resp, int slashZeroLineNum)

{

string respHtml = "";

StreamReader sr = new StreamReader(resp.GetResponseStream());

//respHtml = sr.ReadToEnd();

int lines = 0;

while (!sr.EndOfStream)

{

if (lines == slashZeroLineNum)

{

// seems that the skydrive url returned html in this C# code is abnormal

// for here, this 239/245/? line contains all "\0", total size = 2048046 bytes !!!

// so just for speed normal operation, omit this invalid line here

//gDbgRetHtml = sr.ReadLine();

sr.ReadLine();

}

else

{

respHtml += sr.ReadLine();

}

lines++;

}

return respHtml;

}

private string getSkydriveRespHtmlUnlogin(ref HttpWebResponse resp)

{

return getSkydriveRespHtml(ref resp, 239);

}

private string getSkydriveRespHtmlLogin(ref HttpWebResponse resp)

{

return getSkydriveRespHtml(ref resp, 245);

}

但是由于要获得返回的html源码,所以如果只是用readToEnd的正常方法,即:

StreamReader sr = new StreamReader(resp.GetResponseStream());

respHtml = sr.ReadToEnd();

去获得对应html源码的话,会花很长时间,因为本来正常skydrive返回的html源码,只是80KB前后,

而此处不知何故,多了2048046字节的垃圾\0数据。

对此问题,至今未找到根本原因。

3.另外所说一句,之前用python脚本去访问skydrive,好像没遇到此问题的。

并且,对应的各个浏览器,比如IE9,Chrome等,访问该网址,所返回的html源码也都是正常的60KB,80KB的。

4.所以,由此看来,问题根据原因,估计还是之前就猜测的,估计是.NET(C#)的http相关的库的问题,

导致此特殊的怪异问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值