利用python中的useragent处理micolog中的请求与响应 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code, share > 利用python中的useragent处理micolog中的请求与响应

利用python中的useragent处理micolog中的请求与响应

 

在上一篇日志中曾粗略的介绍了python中使用useragentuseragent的妙处就是能获取到请求端的header的字符,这样我们就可以根据useragent的信息进行不同的响应;

譬如举一个例子:如果我使用一款windows mobile手机系统访问某个页面的时候,只要手机上的useragent信息不修改且正确,服务器端就能通过python中的内置对象request的headers[‘User-Agent’]获取到字符串中包含”Windows CE”;

虽然我对python只懂得皮毛,但是还是很容易想到这里使用python中的正则匹配,也因为这样,感觉python对字符串的操作很强大。

比方说你的micolog已经安装了由“云在天边”同鞋制作的wap博客插件,那么下面的方法可以更好的配合这个插件的使用:

首先,打开根目录blog.py文件:

1)先在初始头部倒入正则的包:

 

import re

或者在使用的位置倒入也可以;

2)找到MainPage类,按照下面的方式修改响应:

 

class MainPage(BasePublicPage):
	def get(self,page=1):
		ua = self.request.headers['User-Agent']
		#device list request-header and respond 302:
		#查找主流的移动设备。
		reStr = 'MIDP|iPhone|iPod|iPad|Android|Windows Mobile|Windows CE|Dopod|BlackBerry|Series60|SymbianOS|PHILIPS|NOKIA|MOT|SAMSUNG|MAUI|J2ME|JAVA|LG|SEC|Alcatel|Ericsson|Panasonic|PLAYSTATION 3'
                if (re.search(reStr, ua)):
                    self.redirect("http://www.0ee.com/wap")#重定向到了对应的wap位置,这里要修改成你自己的。
                    return self.response.set_status(302)
                #list end
                #useragent to deal with mobile devices and 302

反正我感觉自己写的这个算法效率挺低的。。。:( 更严密的正则我就不想写了。。

在这里,我先去查找匹配的字符串,如果在请求的”ua”字符串中匹配reStr中的其中之一(这里的”|”代表“或者”),也就是说if (True),执行重定向,注意这里设置的302暂时重定向;然后呢,wap的爬虫也会跟着302临时重定向进行爬行被重新定向的页面。

这个时候,你可以使用你的移动设备和手机测试访问你的首页,看它是不是跳转到了你的(博客)对应wap首页了?

譬如在手机浏览器中键入我的blog地址:www.0ee.com,这里推荐手机端用opera mini浏览器(uc浏览器貌似获取不到useragent)进行测试。

同样的原理,基于对字符串的操作,如果你希望ie6用户在访问你的博客的时候被重定向到某一个独立的警告页面,我们同样可以实现对ie6(包含ie6)以下浏览器的响应处理:

3)紧接着上面的代码,也可以添加到MainPage类中(如果你需要这样做的话):

 

		#useragent to deal with microsoft ie6 series and 302
		#对ie6和ie6以下的浏览器useragent进行正则匹配。
		if (re.findall('^Mozilla/4.[0-9]+ (compatible; MSIE [0-6]', ua)):
                    self.redirect("http://www.0ee.com/break_the_ie6")
                    return self.response.set_status(302)
                #f*ck ie6 request and respond end

上面的正则应该能很好的识别ie6系列(包含ie6以下)。

如果想看看效果,可以使用你的ie6查看我的blog,看看是不是被定向到http://www.0ee.com/break_the_ie6这个页面了?不过也不排除用户可以伪造useragent,还有就是移动的cmwap网络的干扰和过滤(使用随e行的网络用户可能无效),在服务器端无法获取到用户的useragent,但是呢,在客户端的javascript依然可以判断(本身javascript就在客户端浏览解释器中运行)。

但是需要注意的是,上述ie6的302重定向,这个只针对用户打开请求首页的时候才有效,同样如果你非要强制ie6用户无论访问任何页面都要定向到警告页面,可以修改对应其他的类;

4)或者你可以通过客户端的javaScript辅助跳转:

我的是这样写的:

 

	var rootStr = "/break_the_ie6";//相对于页面域下的slug,修改成你需要定向页面的slug。
	function redirectRoot()
	{
		window.location.replace(rootStr);
	}

	var resultStr = location.href;
	var INSECUREHEAD = "http://";
	var SECUREHEAD = "https://"
	var domainStr = "www.0ee.com";//自定义的域
	var appdomain = "www.gb-2312.appspot.com";//appspot域
	var netdomain = INSECUREHEAD + domainStr + rootStr;
	var insecuredomain = INSECUREHEAD + appdomain + rootStr;
	var securedomain = SECUREHEAD + appdomain + rootStr;
	var resultSubStr = resultStr.substring(0, 7);

	if (resultStr != netdomain && resultStr != ((resultSubStr == INSECUREHEAD) ? insecuredomain : securedomain))
	{
		redirectRoot();
	}

好了,看了之后是不是感觉useragent很有趣??那么,就请micologer们自己动手试一试了。

 

或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2011/02/25/using-python-user-agent-to-deal-request-and-response-for-micolog.html
 
分类: code, share标签: , ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (13) Trackbacks (0)
发表评论 Trackback
 
13 Comments Contributed by Visitors
  1.     Angel 2011年4月6日13:50 11#

    @zhiwei
    我也是好久没有看python程序了。。。

  2.     Angel 2011年4月6日13:52 12#

    @恋78笑话大全网
    是的,一天不学习,日积月累的结果你懂得。。

  3.     Angel 2011年4月6日13:52 13#

    @Code之行人
    千万不要叫我改php的程序,,我一看都头大。。 ok

Leave Comments Here...

:) :-D :( :-o 8-O :-? 8) lol :-x :-P oops cry evil twisted wink ? idea :-| arrow mrgreen roll !

(required)

(required)

网址随您("http://"可以省略)

(Ctrl+Enter)

  • 本站不会泄露您的 Email 地址, 敬请放心.
  • 本站已开启缓存, 请不要重复提交评论.
  • 请注意: 带有 《广告(链)、不健康、或者 产品名字》 的评论一律视为spam.
  • 支持常用 HTML 标签调用, 插入 HTML 标签需注意: < == &lt;> == &gt;.
  • 仅当某人针对您的评论做出回应时, 您才会收到由本站发出的邮件通知.
  • 如您希望以相同方式通知某位网友, 请点击  按钮进行回复.
  • 允许在评论中使用如下代码: 
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> 
    <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> 
    .
  • 鼠标悬浮到评论中的 @someone 区域即可自动显示 someone 的评论内容.
 
 
  • 正在加载...