我正在尝试使用 python 登录我的类(class)页面之一。
我使用 httpFox 来检测登录页面和发布数据。我不知道为什么,但我不断收到错误消息:
SE 3X03 / CS 4X03 error
SE 3X03 / CS 4X03 error - login.cpp
Internal Error 3
这是我的代码:
import requests
s = requests.session()
login_data = {
'sno':'xxxxxxx',
'p1':'xxxxxxx',
'login':'OK'
}
reqheader = {
'Host' :'www.cas.mcmaster.ca',
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko/20100101 Firefox/34.0',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'en-US,en;q=0.5',
'Accept-Encoding' : 'gzip, deflate',
'Referer' : 'http://www.cas.mcmaster.ca/~franek/courses/se3x03_cs4x03/login/startlogin.cgi',
'Connection' : 'keep-alive',
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : '33'
}
myurl = 'http://www.cas.mcmaster.ca/~franek/courses/se3x03_cs4x03/login/login.cgi'
r = s.post(myurl, data = login_data, headers = reqheader)
print r.text
任何人都可以给我提示我哪里做错了吗?我很感激。
编辑:
页面源代码中有一行:
<form name="passwd" action="http://www.cas.mcmaster.ca/~franek/courses/se3x03_cs4x03/login/login.cgi"
method="post">
这是 httpFox 为我检测到的内容,我认为这是实际的登录链接。但是当我尝试在浏览器中访问该网址时,我得到这样的信息:
SE 3X03 / CS 4X03 error - login.cpp
Internal Error 11
这可能是我的代码无法工作的原因吗?
最佳答案
您实际上可以看到在幕后使用的 login.cpp
,它是 available online 。
有趣的部分是内部错误3
发生的地方:
p=line;
if (strncmp(p,"sno=",4)==0) {
p += 4; // eat 'sno='
if (*p=='&') { // no sno value
p++; // eat &
}else{
q=p+1;
while(! (*q=='&' || *q=='\0')) q++;
if (*q=='\0') error("Internal error 2");
*q='\0';
if (strlen(p)>99) error("Internal error 3");
translate(snobuf,p);
p=q+1; // eat '.....&'
}
如您所见,HTTP 参数是从原始字符串中手动解析的。假设 &
是参数分隔符。
所以你需要做的就是传递它想要传入的内容。并且不需要提供任何特殊的 header 或处理cookie:
import requests
s = requests.Session()
data = 'sno={sno}&p1={p1}&login=+OK+'.format(sno=1234567, p1='Password')
myurl = 'http://www.cas.mcmaster.ca/~franek/courses/se3x03_cs4x03/login/login.cgi'
r = s.post(myurl, data=data)
print r.content
由于 1234567
和 Password
无效,我收到的 HTML 代码中包含错误:
Student number not found, please re-enter
使用有效的凭据即可进入。
关于python - 尝试使用 python 登录一个简单的类(class)网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681662/