使用页面代理调用网易微博数据
由于网易微博的数据还没有完全对外开放,像“我的首页”、“我的微博”的JSON数据都不能直接通过Javascript调用,而是必须先登录才能获取。因此,要想把微博数据调用到博客上,就得在后台做一个页面代理。
页面代理的唯一工作就是带上已登录的Cookie发送一个Http请求,获取并输出回应内容。这个过程主要涉及到两个类,HttpWebRequest和HttpWebResponse,它们都在System.Net名字空间内。
通过Firebug的网络面板可以看到,网易微博中“我的微博”数据地址如下:
http://t.163.com/statuses/user_timeline/用户名.json
先建立一个HttpWebRequest类的实例,并设置相应属性的值:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://t.163.com/statuses/user_timeline/heero.json"); // heero是我的用户名
request.Timeout = 15000; // 设置超时时间
接着就得加Cookie了。虽然网易通行证写入的Cookie很多,但是只需NTES_SESS这个就够了。在FireCookie里面找到这个Cookie,并把内容拷贝过来,添加到HttpWebRequest实例中:
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(request.RequestUri, new Cookie("NTES_SESS", "...省略Cookie内容..."));
请求的属性设置完毕后,就可以发送请求并获取回应了,这个操作是通过HttpWebRequest类的GetResponse方法完成的:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet));
string content = reader.ReadToEnd();
按理说这是没问题的了,但是我把content输出后,却发现那是一堆HTML代码,而非JSON数据。仔细再看一下,那段HTML代码竟然是手机微博首页。很明显,这是因为没有设置request的UserAgent而被微博服务器识别为手机客户端了。在发送请求前补上一行模拟IE7浏览器:
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
这下大功告成了,只是最后别忘了关闭响应流和数据流并把数据输出。为性能着想,最好给数据设个过期时间。
reader.Close();
response.Close();
context.Response.Charset = response.CharacterSet;
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(2)); // 设置过期时间为两分钟
context.Response.Write(content);
建议继续学习:
- 让安卓手机通过代理翻墙的方法 (阅读:8427)
- 代理的加密部分 (阅读:7837)
- 关于 SOCKS 代理的远端 DNS 解析 (阅读:7329)
- HTTP 正向代理与反向代理 (阅读:4607)
- 关于不得不在python中使用代理访问网络的方法 (阅读:4558)
- nginx.conf控制指定的代理ip和ip访问的设置手记 (阅读:4255)
- 关于http代理 (阅读:4115)
- socks5代理服务器的配置 (阅读:3569)
- 使用 Perl 实现 HTTP 代理 (阅读:3619)
- 代理的本地部分 (阅读:3469)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Heero's Blog 来源: Heero's Blog
- 标签: 代理 页面代理
- 发布时间:2010-05-28 18:40:07
-
[928] WordPress插件开发 -- 在插件使用 -
[134] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 整理了一份招PHP高级工程师的面试题 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 用 Jquery 模拟 select -
[50] 海量小文件存储 -
[50] Innodb分表太多或者表分区太多,会导致内 -
[50] 全站换域名时利用nginx和javascri -
[49] CloudSMS:免费匿名的云短信 -
[47] jQuery性能优化指南
