注意事项:
- token需要post获取然后在前面加上个"Bearer "
- 请求公司名称的时候需要先使用options请求一次通过安全检查后才能get到数据。
Options:
在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method
首部字段告知服务器实际请求所使用的 HTTP 方法;Access-Control-Request-Headers
请求首部 Access-Control-Request-Headers 出现于 preflight request (预检请求)中,用于通知服务器在真正的请求中会采用哪些请求首部。") 首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。
import requests,pymysql,re,json,csv
data={
'type': 'username',
'username':'stu_id',
'password':'password'
}
id=''
Token=''
db = pymysql.connect("localhost","root","password","test")
cursor = db.cursor()
# 全过程
def raw_num():
cs=open("paiming.csv","r",errors="ignore")
reader=csv.reader(cs)
for line in enumerate(reader):
#print(index)
try:
get_Token(line[1][1])
except Exception as e:
print(e)
#print(line[1][1])
cs.close()
# sql存储到mysql
def store(id,company,adds):
#print(company)
h='Insert into stu(id,company,another) values(%s,"%s","%s")'%(id,company,adds)
print(h)
cursor.execute(h)
db.commit()
# 获取实习单位
def get_Token(stu_id):
data['username']=stu_id
url='https://api.xsix103.cn/prac_manage/v1/token'
r=requests.post(url,data)
# 提取token
Token=re.findall('"accessToken":[^,]*',r.text)[0]
Token=Token[15:-1]
T=re.findall('"id":[^,]*',r.text)[0]
id=T[5:-2]
heads='Bearer '
payload={'Referer':'https://www.xsix103.cn/prac-manage/index/student/stuInfo','Origin':'https://www.xsix103.cn','Accept':'application/json, text/plain, */*','Authorization':heads+Token}
print(payload)
r=requests.options('https://api.xsix103.cn/prac_manage/v1/info/'+id)
r=requests.get('https://api.xsix103.cn/prac_manage/v1/info/'+id,headers=payload)
print(r.text)
b=json.loads(r.text)
company=str(b['phiCompany'])
add=str(b['phiRemark'])
store(stu_id,company,add)
try:
raw_num()
except Exception as e:
print(e)
db.close()
网友评论