주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

초보자를 위한 HTTP이해 Part08 (응용편)

| 2010.03.01 23:04:20 댓글: 0 조회: 3451 추천: 0
분류웹 디자인 https://life.moyiza.kr/itstudy/1750737
java로 예제 코딩하려던 참에 마침 좋은 예제를 발견했습니다. 예제는 python scripting으로 http requesting을 완성하는 프로그램입니다. 본문출처

아시는 분은 알겠지만, 중국에서 가장 큰 (아마 세계에서도 젤 클것 같지만..) p2p 공유싸이트 verycd.com에 본인이 직접 자료를 올리려면 해당 계정이 铜盘등급의 계정을 갖고 있어야 하는데 이 등급은 한달동안 쭉~ 부지런히 일당 한번씩 로그인 해서 일정 개수의 리플을 달아야만 올릴수 있습니다. 날마다 로그인하고 리플 다는게 번거로워서 소스의 작자가 '다 알아서 해주는' 프로그램을 만들어 배포한 것입니다. 필요한 주석처리는 작자가 이미 다 해주었는지라 굳이 설명은 하지 않아도 될것 같네요.

#!/usr/bin/env python
#coding:utf-8
#author:observer
#http://obmem.com
import urllib,urllib2,cookielib
import re,time,random
 
username = 'username' #改成自己的用户名
passwd = 'password' #改成自己的密码
#这个就是发帖内容,任意改,会随机选择一条发帖
msg = [ '多谢楼主',
'Mark',
'正在找这个,谢谢',
'谢谢分享',
]
 
def login():
'''这个就是登录脚本'''
print 'try to login...'
 
#登录需要准备cookie
cookie=cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie), urllib2.HTTPHandler)
urllib2.install_opener(opener)
 
#先获取verycd的fk串,用于填表
print '...getting login form...'
loginform = urllib2.urlopen('http://secure.verycd.com/signin/*/http://www.verycd.com/').read()
fk = re.compile(r'id="fk" value="(.*)"').findall(loginform)[0]
 
#好的,现在填表
postdata=urllib.urlencode({'username':username,
'password':passwd,
'continueURI':'http://www.verycd.com/',
'fk':fk,
'login_submit':'登录',
})
req = urllib2.Request(
url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
data = postdata
)
 
#填header,伪装成正常浏览访问,这是一种写法,也可以用我之前那篇文章的写法,更有条理一点
req.add_header('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6')
req.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
req.add_header('Accept-Encoding','gzip,deflate')
 
#交登录表,然后就登录成功了
print '...login form submitted'
result = urllib2.urlopen(req).read()
print '...login succeed!'
 
def farm():
'''这个就是灌水函数了'''
#读取主页,获得主页的所有资源id
res = urllib.urlopen('http://www.verycd.com').read()
topics = re.compile(r'/topics/(d+)').findall(res)
topics = set(topics)
print topics
 
#对每一个获取的资源,回一贴支持楼主:)
#语法和刚才交登录表差不多
for topic in topics:
url = 'http://www.verycd.com/topics/'+str(topic)+'/reply#fast-replay'
print url
postData = {
'contents':random.choice(msg),
'use_bbcode':'1',
'tid':str(topic),
'Action':'FolderCommentOperate:doReplyFolder'
}
postData = urllib.urlencode(postData)
req = urllib2.Request(url = url, data = postData )
kk = urllib2.urlopen(req).read()
time.sleep(random.randint(1,10)) #随机等待一会再发贴
 
if __name__ == '__main__':
login()
farm()



또 다른 응용 아이디어를 예를 들자면,

1. 특정 싸이트에 접속해서 특정 키워드 혹은 특정 아이디로 로그인 된 글을 admin 입장에서 수정, 삭제까지 할수 있죠. 물론 이미 필터링 기능이 추가되었다면... pass...

2. 가끔씩 게시판들을 보다가 길다란 광고글귀들이 한번에 여러개가 달린것을 볼수 있는데, 이것도 HTTP의 응용에 해당하죠. 한번 돌린 프로그램으로 한번에 원하는 만큼 댓글을 달게끔 말입니다. HTTP를 이해하지 못한채로 손수 직접 글을 달았다면 지금 봐선 참 무식하죠. 물론 예외의 케이스도 있답니다. 글을 올리다가 랜덤으로 생긴 문자나 숫자를 보이는대로 입력하라는 사용자 확인 절차를 예를 들면 저희들처럼 손수 올린 글이 아닌 프로그램들을 막기 위한 한가지 수단이겠죠. 이런 식으로 말이죠.



수많은 예제들이 가능할텐데 개발자한테 달려있겠습니다. 'Apache HTTP Client' 키워드로 googling해보시면서 더 많은 아이디어들을 음미해보세요.

추천 (0) 선물 (0명)
IP: ♡.136.♡.63
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11946
관리자
2003-09-20
11498
관리자
2003-09-20
20630
지구인
2010-08-27
19422
지구인
2009-09-07
13741
SOLIDH
2010-01-29
15699
엔죠라이프
2004-10-07
16791
자유의검
2010-03-15
2332
자유의검
2010-03-14
2548
자유의검
2010-03-14
1620
자유의검
2010-03-14
1402
자유의검
2010-03-14
1324
자유의검
2010-03-14
1373
엔죠라이프
2010-03-11
1108
커피한잔76
2010-03-09
4002
rblueberry
2010-03-08
2343
2010-03-01
3451
2010-02-28
1871
2010-02-28
1499
2010-02-27
1343
2010-02-27
1360
2010-02-27
1369
2010-02-27
1427
2010-02-27
3590
엔죠라이프
2010-02-26
2286
신규가입
2010-02-25
9903
2010-02-20
2182
신규가입
2010-02-20
4592
모이자 모바일