尝试使用python登录到一个简单的课程网站
我正在尝试使用python登录我的一个课程页面 我使用httpFox来检测登录页面和post数据。我不知道为什么,但我总是说: SE 3X03/CS 4X03错误 SE 3X03/CS 4X03错误-login.cpp 内部错误3 这是我的密码:尝试使用python登录到一个简单的课程网站,python,python-2.7,web-scraping,web-crawler,python-requests,Python,Python 2.7,Web Scraping,Web Crawler,Python Requests,我正在尝试使用python登录我的一个课程页面 我使用httpFox来检测登录页面和post数据。我不知道为什么,但我总是说: SE 3X03/CS 4X03错误 SE 3X03/CS 4X03错误-login.cpp 内部错误3 这是我的密码: import requests s = requests.session() login_data = { 'sno':'xxxxxxx', 'p1':'xxxxxxx', 'login':'OK' } reqheader
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为我检测到的,我认为这是实际的登录链接。但当我试图在浏览器中访问该url时,我得到了如下结果:
SE 3X03/CS 4X03错误-login.cpp
内部错误11
这可能是我的代码不起作用的原因吗?你可以看到
login.cpp
是在引擎盖下使用的
有趣的部分是内部错误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参数是从原始字符串手动解析的。假设&
是一个参数分隔符
所以你需要做的是传递它想要传递的东西。无需提供任何特殊的标题或处理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
使用有效的凭证,您将进入。您可以实际看到在引擎盖下使用的login.cpp,它可以在线访问。-哈哈,这真是太可怕了。@ReutSharabani他们非常安全,耶:)“你可以看到在引擎盖下使用的login.cpp。”。我不明白这个部分。您是如何找到cpp文件的?“我自己也在试着去。”杰克,你应该告诉那里的负责人,任何人都可以使用他想要的任何密码进入。如果您使用@alecxe put here链接,您将获得
login.cpp
文件。。。但是你几乎得到了所有的东西。一般来说,网站的配置不正确。我给管理员发了封邮件,他应该更改一些配置。现在这个网站被破坏了,任何人都可以抓取所有成员的密码。更具体地说:该站点只显示服务器上重新设置的任何文件,所有内容(以及密码和代码)都在一个文件中。