PythonProject(1)vim的Hustoj插件

打算写一个vim的插件,或者emacs的插件。可以在编辑器里打比赛,看rank,交代码。总之相当于一个桌面版的hustoj

这是上学期就有的一个脑洞产物,昨天学了Python的爬虫,发现这个东西很有实现的可能嘛!

不知道能坚持多久,我这个三分钟热度。。。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

第一天

用fairfox+httpfox弄明白了hustoj的登陆,提交过程。//没有学过各种网络协议只能说一知半解吧,主要是参考文章写的 http://www.jb51.net/article/57161.htm

  hustoj的登陆过程

  先post一组数据到login.action,伪装成浏览器就会返回succes了

  

1     postdata = urllib.urlencode({
2         'username':'helica',
3         'password':''    #当然要插入你的密码!
4     })

  hustoj的提交过程

  post一组数据的sumit.action(这里提交的代码是用base64加密的),保持登陆的cookie(?没有测试不保持)

  提交之后再给fetchstatus post一组数据,就可以返回你交的题的提交id了

  再之后就是定时访问getResult 获得提交题的状态

当然,hustoj是开源的,我这样自己看数据包是不是太蛋疼了。。。

 1 # -*- coding: utf-8 -*-
 2 #
 3 #---------------------------------------------------
 4 #   爬虫:hustoj_spider
 5 #   作者: helica
 6 #   日期: 2015-8-12
 7 #   语言: py2
 8 #
 9 #
10 #---------------------------------------------------
11 
12 import urllib
13 import urllib2
14 import re
15 import cookielib
16 
17 global cookie
18 cookie = cookielib.CookieJar()
19 
20 def login():
21     global cookie
22     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
23     
24     postdata = urllib.urlencode({
25         'username':'helica',
26         'password':''
27     })
28 
29     headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')
30 
31     opener.addheaders = [headers]
32 
33     req = urllib2.Request(
34         url = 'http://acm.hust.edu.cn/vjudge/user/login.action',
35         data = postdata
36     )
37 
38     result = opener.open(req)
39 
40 
41     return result.read()
42 
43 def getInfo():
44     global cookie
45     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
46     headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')
47     opener.addheaders = [headers]
48 
49     req = urllib2.Request(url = 'http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#overview')
50 
51     result = opener.open(req)
52     return result.read()
53 
54 def SubCode():
55     global cookie
56     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
57     headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')
58     opener.addheaders = [headers]
59 
60     submitdata = urllib.urlencode({
61         'cid':'79121',
62         'num':'C',
63         'language':'3',
64         'isOpen':'0',
65         'source':'Ly9sZXQgbWUgZG8gYSB0ZXN0IHRvIGZpbmQgdGhlIHVybCBvZiB0aGUgYWRkIGkgc3ViIG15IGNvZGUKLy9pIHdhbnQgbWFrZSBhIHNwaWRlciBmb3IgbXkgdmltCi8vc28gdGhhdCBpIGNhbiBzdWJtaXQgY29kZSB2aWEgbXkgZWRpdG9yIFhE'
66     })
67 
68     req = urllib2.Request(
69         url = 'http://acm.hust.edu.cn/vjudge/contest/submit.action',
70         data = submitdata
71         )
72     
73     result = opener.open(req)
74     
75     return result.read()
76 
77 def getStatus():
78     global cookie
79     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
80     headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')
81     opener.addheaders = [headers]
82 
83 
84 
85 print login()
86 #print getInfo()
87 print SubCode()
原文地址:https://www.cnblogs.com/helica/p/4725933.html