Initial Commit
This commit is contained in:
commit
7fd793faa3
170
main.cpp
Normal file
170
main.cpp
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "user_info.hpp"
|
||||||
|
|
||||||
|
const string curl_bin="C:\\curl ";
|
||||||
|
|
||||||
|
int system(const std::string& str)
|
||||||
|
{
|
||||||
|
//cout<<"SystemExec: "<<str<<endl;
|
||||||
|
return system(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isConnectedToInternet()
|
||||||
|
{
|
||||||
|
ostringstream ostr;
|
||||||
|
ostr<<curl_bin<<" baidu.com > ans.txt 2> curl.txt";
|
||||||
|
|
||||||
|
system(ostr.str());
|
||||||
|
|
||||||
|
ifstream ifs("ans.txt");
|
||||||
|
string temp,ans;
|
||||||
|
while(getline(ifs,temp)) ans.append(temp);
|
||||||
|
|
||||||
|
return (ans.find("baidu")!=string::npos);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char hexchars[] = "0123456789ABCDEF";
|
||||||
|
char* basic_url_encode(char const *s, int len, int *new_length)
|
||||||
|
{
|
||||||
|
register unsigned char c;
|
||||||
|
unsigned char *to, *start;
|
||||||
|
unsigned char const *from, *end;
|
||||||
|
|
||||||
|
from = (unsigned char *)s;
|
||||||
|
end = (unsigned char *)s + len;
|
||||||
|
start = to = (unsigned char *) calloc(1, 3*len+1);
|
||||||
|
|
||||||
|
while (from < end)
|
||||||
|
{
|
||||||
|
c = *from++;
|
||||||
|
|
||||||
|
if (c == ' ')
|
||||||
|
{
|
||||||
|
*to++ = '+';
|
||||||
|
}
|
||||||
|
else if ((c < '0' && c != '-' && c != '.') ||
|
||||||
|
(c < 'A' && c > '9') ||
|
||||||
|
(c > 'Z' && c < 'a' && c != '_') ||
|
||||||
|
(c > 'z'))
|
||||||
|
{
|
||||||
|
to[0] = '%';
|
||||||
|
to[1] = hexchars[c >> 4];
|
||||||
|
to[2] = hexchars[c & 15];
|
||||||
|
to += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*to++ = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*to = 0;
|
||||||
|
if (new_length)
|
||||||
|
{
|
||||||
|
*new_length = to - start;
|
||||||
|
}
|
||||||
|
return (char *) start;
|
||||||
|
}
|
||||||
|
|
||||||
|
string URLEncode(const string& url_to_encode)
|
||||||
|
{
|
||||||
|
char* ptr=basic_url_encode(url_to_encode.c_str(),url_to_encode.size(),nullptr);
|
||||||
|
string new_url(ptr);
|
||||||
|
free(ptr);
|
||||||
|
return new_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
string QURLEncode(const string& url_to_encode)
|
||||||
|
{
|
||||||
|
string s=URLEncode(url_to_encode);
|
||||||
|
string ans;
|
||||||
|
int sz=s.size();
|
||||||
|
for(int i=0;i<sz;i++)
|
||||||
|
{
|
||||||
|
if(s[i]=='%')
|
||||||
|
{
|
||||||
|
/// Special URL Encode Rule (Example: %26 --> %2526)
|
||||||
|
ans.append("%25");
|
||||||
|
}
|
||||||
|
else ans.push_back(s[i]);
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool try_qust_with(const string& login_url,const string& uname,const string& passwd)
|
||||||
|
{
|
||||||
|
ostringstream ostr;
|
||||||
|
ostr<<curl_bin<<" \"http://211.87.157.37/eportal/InterFace.do?method=login\" -d \"userId="<<uname<<"&password="<<passwd<<"&service=&queryString=";
|
||||||
|
|
||||||
|
string url=login_url.substr(login_url.find("?")+1);
|
||||||
|
url=QURLEncode(url);
|
||||||
|
|
||||||
|
ostr<<url<<"&operatorPwd=&operatorUserId=&validcode=\" > login.txt 2> curl.txt";
|
||||||
|
|
||||||
|
system(ostr.str());
|
||||||
|
|
||||||
|
ifstream ifs("login.txt");
|
||||||
|
string temp,ans;
|
||||||
|
while(getline(ifs,temp)) ans.append(temp);
|
||||||
|
|
||||||
|
return (ans.find("success")!=string::npos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void qust_login()
|
||||||
|
{
|
||||||
|
cout<<"正在测试网络..."<<endl;
|
||||||
|
|
||||||
|
if(isConnectedToInternet())
|
||||||
|
{
|
||||||
|
cout<<"网络已连接."<<endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout<<"网络未连接."<<endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
string login_url;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
ifstream ifs("ans.txt");
|
||||||
|
string temp,ans;
|
||||||
|
while(getline(ifs,temp)) ans.append(temp);
|
||||||
|
|
||||||
|
size_t L=ans.find("'");
|
||||||
|
if(L==string::npos)
|
||||||
|
{
|
||||||
|
cout<<"获取QUST登录URL失败"<<endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
size_t R=ans.find("'",L+1); /// Search from L+1
|
||||||
|
if(R==string::npos)
|
||||||
|
{
|
||||||
|
cout<<"获取QUST登录URL不完整"<<endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
login_url=ans.substr(L+1,R-(L+1));
|
||||||
|
}while(0);
|
||||||
|
|
||||||
|
if(try_qust_with(login_url,username,passwd))
|
||||||
|
{
|
||||||
|
cout<<"QUST登录成功"<<endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout<<"QUST登录失败: 账号或密码错误? 登录过于频繁? "<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
qust_login();
|
||||||
|
return 0;
|
||||||
|
}
|
4
user_info.hpp
Normal file
4
user_info.hpp
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
/// Give values to the following variables as you wish
|
||||||
|
|
||||||
|
const string username;
|
||||||
|
const string passwd;
|
Reference in New Issue
Block a user