PythonChallenge Mission 17

来源:互联网 发布:数据库测试题 编辑:程序博客网 时间:2024/05/29 04:55

记得刚打开PythonChallenge网页时,首页告诉我们这个挑战有33关。17关正好处于半期刚过,是不是要来一发期中考试啦?

果不其然这一关真的事巨多,复习了前面好几关用到的知识点,当然也不忘插上新的知识点——cookie.

好了,回到主题,打开17关,看到一大坨曲奇饼!Cookies!而左下角又插入了一张四层相识的图片——没错就是你!第四关的那张图片!

然而到目前为止还没有什么头绪,而打开源代码又没有什么发现,于是将网址换为cookies,告诉我们“yummy chocolate chips”——难不成作者也是个吃货?

还是不明白,又把chocolate写入网址,返回的文字狠狠地教育了我一顿——“do you want to eat or play?”

--------------------------------------------昏割线--------------------------------------------

实在惭愧,明明在学习python挑战,却想到了吃。。。

无论做什么事都要一心一意的,这里手机党(尤其是我!)注意了,该学习该工作的时候一定away from phone!

专心才能make big progress efficiently!

--------------------------------------------昏割线--------------------------------------------

于是返回去重新思考,想到cookie是网页的一个属性,于是决定查看一下这个网页的cookie

我用的chrome,里面开发者工具为我们提供了console平台,打开之,输入document.cookie,输出如下:

"info=you+should+have+followed+busynothing..."

看到busynothing就想到了这不就是第四关的过关技巧嘛!!!再结合上本关图片上还有一张第四关的小图,更确信无疑想过关就要重新看看第四关的东西啊!

来到第四关,联想到cookie,就考虑是不是要把每个链接节点的cookie输出啊,于是上代码:

import urllib2from urllib import quote_plus, unquote_plusimport cookielibcj = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))def getPage(nothing="12345"):url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?busynothing="req = urllib2.Request(url+nothing)response = opener.open(req)return response.read()num = 12345cookievals=[]while True:    num = getPage(str(num)).split(' ')[-1]    for cookie in cj:        print cookie.value,unquote_plus(cookie.value)        cookievals.append(unquote_plus(cookie.value))    print num,cookievals
这里需要说明的是之所以每次都把num,cookievals打印一遍,是因为访问哪个网站真的好慢,还有崩溃的风险,要及时记录下当前进度位置,以便崩溃后能“断点重连”。

经过好几次“断点重连”得到的cookievals如下所示:

['B', 'Z', 'h', '9', '1', 'A', 'Y', '&', 'S', 'Y', '\x94', ':', '\xe2', 'I', '\x00', '\x00', '!', '\x19', '\x80', 'P', '\x81', '\x11', '\x00', '\xaf', 'g', '\x9e', '\xa0', ' ', '\x00', 'h', 'E', '=', 'M', '\xb5', '#', '\xd0', '\xd4', '\xd1', '\xe2', '\x8d', '\x06', '\xa9', '\xfa', '&', 'S', '\xd4', '\xd3', '!', '\xa1', '\xea', 'i', '7', 'h', '\x9b', '\x9a', '+', '\xbf', '`', '"', '\xc5', 'W', 'X', '\xe1', '\xad', 'L', '\x80', '\xe8', 'V', '<', '\xc6', '\xa8', '\xdb', 'H', '&', '3', '2', '\x18', '\xa8', 'x', '\x01', '\x08', '!', '\x8d', 'S', '\x0b', '\xc8', '\xaf', '\x96', 'K', 'O', '\xca', '2', '\xb0', '\xf1', '\xbd', '\x1d', 'u', '\xa0', '\x86', '\x05', '\x92', 's', '\xb0', '\x92', '\xc4', 'B', 'c', '\xf1', 'w', '$', 'S', '\x85', '\t', '\t', 'C', '\xae', '$', '\x90']

这么一坨数字不很像第八关里的BZ码嘛?于是上代码decode之:

import bz2message = bz2.decompress("".join(cookievals))print message
显示结果为:

is it the 26th already? call his father and inform him that "the flowers are on their way". he'll understand.

这还是对mozart生日的描述,不过双关之意告诉我们要利用第13关的电话给mozart的爸爸打电话,于是求助度娘,mozart的爸爸叫Leopold。OK,上代码:

import xmlrpclibx= xmlrpclib.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php")response = x.phone("Leopold")print response
输出为:555-VIOLIN

于是把violin替换网址http://www.pythonchallenge.com/pc/return/violin.html,返回no! i mean yes! but ../stuff/violin.php

于是我们把网址替换为http://www.pythonchallenge.com/pc/stuff/violin.php

终于看到了mozart‘s father-leopold的尊容。


可是还是不知道什么意思,于是看了看Title——it's me,what do you want?于是又想到了要 inform him that "the flowers are on their way",就知道了并不能简简单单地访问网页,而要携带着信息——"the flowers are on their way"来访问。

于是上代码:

o = urllib2.build_opener()message = "the flowers are on their way"o.addheaders.append(('Cookie', 'info='+quote_plus(message)))res = o.open("http://www.pythonchallenge.com/pc/stuff/violin.php")print res.read()
在返回的网页源代码中我们发现多了下面一条语句:

oh well, don't you dare to forget the balloons。

猜测将balloons写入网址http://www.pythonchallenge.com/pc/return/balloons.html,终于。。终于。。进入下一关!

这个期中考试,题量真的挺大的。。。


花絮:

1.“断点重连”技术在机器学习中挺常用,想象一下已经训练了一个好几个小时的模型突然应为一些原因电脑崩了,若是参数没有保存,那真是欲哭无泪啊哈哈。不过那里断点重连不像本文这么简陋,而是都有对应的保存文本格式及断后重新提取方案,以后写到机器学习我会在叙述。

2.关于python网络编程,窝现在正在看一些书籍文档,之后要专门总结出来,再次挖个坑,算上之前的正则表达式就有三个坑了!!!


1 0
原创粉丝点击