Python 使用 python 登录到我的 cpanel

Posted

技术标签:

【中文标题】Python 使用 python 登录到我的 cpanel【英文标题】:Python login to my cpanel with python 【发布时间】:2014-10-16 16:12:12 【问题描述】:

我想用 python 创建一个脚本来测试我的组合(用户名和密码)是否正确,但我总是收到 401 HTTP 响应,所以我认为脚本无法提交登录数据。 (cpanel 登录不是传统的登录面板,所以我将使用演示登录面板作为我们的 example-site.com):

import urllib, urllib2, os, sys, re
site = 'http://cpanel.demo.cpanel.net/'
username = 'demo'
password = 'demo'
headers = 
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding" : "gzip, deflate",
"Accept-Charset" : "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
data = [
("user",username), 
("pass",password), 
("testcookie",1), 
("submit","Log In"), 
("redirect_to",'http://cpanel.demo.cpanel.net/'), 
("rememberme","forever")]

req = urllib2.Request(site, urllib.urlencode(dict(data)), dict(headers))
response = urllib2.urlopen(req)
if any('index.html' in v for v in response.headers.values()) == True :
 print "Correct login" 
else :
 print "incorrect"

我得到这个错误:

Traceback (most recent call last):
  File "C:\Python27\cp\cp4.py", line 19, in <module>
    response = urllib2.urlopen(req)
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 400, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Access Denied

有解决问题和测试登录详细信息的想法吗?

【问题讨论】:

网站应该是'http://cpanel.demo.cpanel.net/login/',我想。 您也可以从该目录登录,但总是得到相同的响应 您不应该发布到您看到表单的页面,您应该发布到表单的操作字段。 我认为你需要做一个 POST,而不是一个 GET。 @Carpetsmoker 这是一个帖子。当data 被传递时,urllib2 会自动切换。 Link 【参考方案1】:

考虑使用Requests,这是一个更加用户友好的 Python HTTP 客户端库。

import requests

url = 'http://cpanel.demo.cpanel.net/login/'
username = 'demo'
password = 'demo'
headers = 
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',

data = 
    'user': username,
    'pass': password,


response = requests.post(url, headers=headers, data=data)
if response.status_code == 200:
    print "Successfully logged in as username".format(username=username)
else:
    print "Login unsuccessful: HTTP/status_code".format(status_code=response.status_code)

已编辑以检查 HTTP/200,因为如果登录不正确,CPanel 会抛出 HTTP/401。

【讨论】:

是的,它在本示例中有效,但在任何其他主机中我都会收到此错误:/ Traceback (most recent call last): File "C:\Python27\cp\cp6.py", line 3, in &lt;module&gt; r = requests.post("http://example-ip:2082", data=logininfo) socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host 我能做什么??【参考方案2】:

您需要将登录信息发布到http://cpanel.demo.cpanel.net/login/

使用请求的示例(更简单!):

import requests
logininfo = 'user':'demo', 'pass':'demo'
r = requests.post("http://cpanel.demo.cpanel.net/login/", data=logininfo)
if (r.status_code==200):
     print "Correct login"

【讨论】:

以上是关于Python 使用 python 登录到我的 cpanel的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python selenium 点击链接?

将 SQL 表中的所有数据提取到我的 Python 代码中

尝试通过 Chromedriver 2.34、Selenium 3.8 和 Python 3.6.2 登录富国银行时出错

如何将 python 命令行工具添加到我的 PATH?

跟踪 python 需求文件中的更改并将更改自动同步到我的 conda env

如何从android发送消息到我的笔记本电脑python程序?