bnuoj代码提交器

发表于: 2013年01月19 00:00

用bash shell写的一个bnuoj平台的代码提交器. 平时习惯用vim在终端写代码,每次提交的时候特别麻烦,写个提交器,就方便多了 顺便联系一下shell编程

但是程序源代码的第一行要表明写一个注释,表示当前题目的题号

提交数据,我用wireshark抓包,分析了一下提交上去的数据.具体内容看代码吧

:::bash
#!/bin/bash

filename=$1
#你的ojID
user_id="1039664763"
#是否分享代码,1表示分享,0不分享
isshare="1"
#编程语言
clanguage="C++"

#配置信息,oj检查了浏览器
login="http://www.bnuoj.com/bnuoj/login.php"
action="http://www.bnuoj.com/bnuoj/action.php"
ua="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"

#urlencode转码
data=`cat $filename`
oldIFS=$IFS
IFS='
'
pro_id=`head -n 1 $filename|tr -d 'a-zA-Z/*'`
for line in $data
do
mysource+=`echo $line|od -An -tx1|tr -d '\n'|tr ' ' %`
#mysource+=`echo $line|xxd -plain |tr -d '\n'|  sed 's/\(..\)/%\1/g'`
done
IFS=$oldIFS

declare -A plang
plang=([C++]='1' [C]='2' [JAVA]='3' [PASCAL]='4' [PYTHON]='5' [C#]='6' [FORTRAN]='7' [PERL]='8' [RUBY]='9' [ADA]='10' [SML]='11' [VC++]='12' [VC]='13' [CLANG]='14' [CLANG++]='15')
language=${plang[$clanguage]}
if [ ! -e  ./.bnucookie ];
then
    read -p "input your password" pass
    clear 
    state=`curl --cookie-jar .bnucookie --user-agent "$ua" --data "username=$user_id&password=$pass&cksave:365" $login`
    if [[ $state != "Yes" ]];
    then
        echo $state
        rm ./.bnucookie
        exit 0
    fi
fi
mydata="user_id=$user_id&problem_id=$pro_id&language=$language&isshare=$isshare&source=$mysource"

#用curl总是出错,就换成了wget
#curl --cookie ./.bnucookie --user-agent "$ua" --data "$mydata"   $action

wget --user-agent="$ua" --post-data="$mydata" --load-cookies=./.bnucookie $action -O /tmp/bnupost
state=`cat /tmp/bnupost`

if [[ $state == Submitted. ]];
then
    echo "POST SUCCESS"
else
    echo "POST FAILED"
    rm ./.bnucookie
fi
rm /tmp/bnupost
© 2018 - fluyy - 粤ICP备17114935号