Python Challenge 17의 Url은 다음과 같다
Python challenge 17 : http://www.pythonchallenge.com/pc/return/romance.html
구성
일단 페이지나, 사진이나, 주석이나 특별한 점은 보이지 않는다. Title인 eat? 이라는 글자를 보아 cookies는 cookies인데, 먹는 쿠키는 아닌 거 같다. 혹시 아래 사진을 기억하는가? 조금 힌트가 될지도 모르겠다.
해결 아이디어
문제의 아래쪽 사진은 4번문제인 LinkedList의 사진이다.
2021.05.16 - [Python/Python Challenge] - [Python Challenge 4] 무한으로 즐겨요 requests
쿠키를 확인하면 다음과 같은 글을 확인할 수 있다.
오호... 그러니까 이전 문제에서 사용하던 parameter인 nothing대신 busynothing을 사용해 보자고 한다. 바꾸어서 접속해보자(시작번호는 역시 12345이다. 주석에 쓰여있는 대로다)
으흠; 4번에서 왔다면 당장 꺼지라고 써있다. cookies를 확인하자
1. busynothing=44827의 cookies
2. busynothing=45439(44827다음거)의 cookies
오호; cookies가 순서대로 BZ를 이루고 있다. 어디서 많이 본 확장자 아닌가, 바로 bz2모듈을 사용하는 문제였던 8번 문제의 해결방법을 그대로 차용한 듯 하자.
2021.05.19 - [Python/Python Challenge] - [Python Challenge 8] 소난다
자 이제 코딩 시간이다.
### 17_1.py
from requests import *
import re
import bz2
if __name__ == "__main__" :
url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?busynothing="
nothing = "12345"
answer = list()
while(True) :
new_url = url+nothing
res = get(new_url)
if(len(res.cookies["info"])==3) :
answer.append(int(res.cookies['info'][1:],base=16))
else :
if(res.cookies['info'] == "+") :
answer.append(32)
else :
answer.append(ord(res.cookies["info"]))
try :
nothing = re.findall("busynothing is (\d+)",res.text, re.DOTALL)[-1]
except IndexError :
break
print(res.text)
print(bz2.decompress(bytes(answer)).decode())
중간에 +를 공백으로(정수 32 >> 헥스 0x20 >> " ")로 치환하는 부분이 있다. urlencode에서는 +가 공백을 의미한다. 만약 정말 헥스값으로 "+"를 표현했다면 "+"로 써야 되지만, 그게 아니라 글자로 +가 되어있다면 그건 공백으로 치환해야 한다. 결과는 다음과 같다.
and the next busynothing is 64994
and the next busynothing is 66109
and the next busynothing is 37855
and the next busynothing is 36383
and the next busynothing is 68548
and the next busynothing is 96070
and the next busynothing is 83051
is it the 26th already? call his father and inform him that "the flowers are on their way". he'll understand.
그렇다. 그니까 한국말로 번역하면
"어머 벌써 26일이 되었나? 그 사람 아버지한테 연락해서 '꽃은 각자 살아가는 방법이 있다고' 전달해줘 이해하실 거야"
이다. 오호.. 이번엔 26일이다. 저번 문제를 기억하는가
2021.05.29 - [Python/Python Challenge] - [Python Challenge 16] 다 내 밑으로 정렬해
맞다 문제의 주인공은 mozart였다. 그의 아버지 이름을 검색해 보자
성함은 Leopold 되시나 보다. 전화는 어떻게 걸 수 있을까? 바로 Bert는 나쁜 놈에서 나왔던 xmlrpc서버의 phone메서드를 이용해야 된다.(와 이 정도면 이번 문제는 종합 선물세트다)
2021.05.19 - [Python/Python Challenge] - [Python Challenge 13] 자니??.... 그냥 전화해봤어...
자 오랜만에 사용하는 xmlrpc 코드다.
### 17_2.py
import xmlrpc.client as xc
if __name__ == "__main__" :
url = "http://www.pythonchallenge.com/pc/phonebook.php"
serv = xc.ServerProxy(url)
print(serv.phone("Leopold"))
출력은 다음과 같다.
555-VIOLIN
참 길었다. violin으로 접속해 보자.
퉤
IC 아직 안 끝났다. Title은 It's me. what do you want?이다.
그러니까 처음 linkedlist의 cookies를 이용해서 얻어냈던 문자열인 'the flowers are ib their ways"를 전달해야 한다. 여태까지 사용했던 info를 key로 보내보자 코딩 타임이다.
### 17_3.py
from requests import *
if __name__=="__main__" :
url = "http://www.pythonchallenge.com/pc/stuff/violin.php"
param = "the flowers are on their way"
param = param.replace(" ","+")
cookies = {"info":param}
res = get(url,cookies=cookies,auth=('hugt','file'))
print(res.text)
출력에는 다음과 같은 문자열이 쓰여 있었다.
"noh well, don't you dare to forget the balloons."
그렇군 X바 진짜 끝이다.
Answer Url : http://www.pythonchallenge.com/pc/return/balloons.html
종합 선물세트였다. 어려운 건 없었는데, 젠장 기억력이 좋은 편이 아니어서 쿠소.
'Python > Python Challenge' 카테고리의 다른 글
[Python Challenge 19] You are An Idiot! (0) | 2021.06.03 |
---|---|
[Python Challenge 18] 즐거운 다른그림찾기놀이 (0) | 2021.06.02 |
[Python Challenge 16] 다 내 밑으로 정렬해 (0) | 2021.05.29 |
[Python Challenge 15] 다섯살 때부터 친 피아노 (0) | 2021.05.27 |
[Python Challenge 14] 빙글빙글 (2) | 2021.05.21 |