diff --git a/src/api/HTTP.js b/src/api/HTTP.js new file mode 100644 index 0000000..adb0ae6 --- /dev/null +++ b/src/api/HTTP.js @@ -0,0 +1,26 @@ +import iconv from 'iconv-lite'; +import {Buffer} from 'buffer'; + +function post(url, data) { + return new Promise(function (resolve, reject) { + const request = new XMLHttpRequest(); + + request.onload = () => { + if (request.status === 200) { + resolve(iconv.decode(Buffer.from(request.response), 'gbk')); + } else { + reject(new Error(request.statusText)); + } + }; + request.onerror = () => reject(new Error(request.statusText)); + request.responseType = 'arraybuffer'; + + request.open('POST', url); + for (let headerKey in data.headers) { + request.setRequestHeader(headerKey, data.headers[headerKey]); + } + request.send(data.body); + }); +} + +export {post}; diff --git a/src/component/YooLogin.js b/src/component/YooLogin.js index 0866599..c6cb104 100644 --- a/src/component/YooLogin.js +++ b/src/component/YooLogin.js @@ -1,5 +1,7 @@ import React, {Component} from 'react'; import YooLoginUI from '../ui/YooLoginUI'; +import CookieManager from '@react-native-community/cookies'; +import {post} from '../api/HTTP'; export default class YooLogin extends Component { constructor(props) { @@ -21,7 +23,35 @@ export default class YooLogin extends Component { this.setState({password: value}); } - login(onFail) {} + login(onFail) { + post('http://eol.ctbu.edu.cn/meol/loginCheck.do', { + headers: { + 'Cache-Control': 'max-age=0', + 'Upgrade-Insecure-Requests': '1', + Origin: 'http://eol.ctbu.edu.cn', + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': 'YooMooc', + Referer: + 'http://eol.ctbu.edu.cn/meol/common/security/login.jsp?enterLid=46445', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7', + }, + body: + 'logintoken=' + + new Date().getTime() + + '&enterLid=46445' + + '&IPT_LOGINUSERNAME=' + + this.state.username + + '&IPT_LOGINPASSWORD=' + + this.state.password, + }).then((response) => { + if (/(.|\n)*用户登录(.|\n)*<\/title>/.test(response)) { + onFail(); + CookieManager.clearAll(); + } else if (/<title>(.|\n)*网络课程(.|\n)*<\/title>/.test(response)) { + // TODO:onSuccess(); + } + }); + } render() { return (