Python 3-将凭证发送到PHP页面的脚本

时间:2018-11-10 22:19:32

标签: php python-3.x

我想尝试将登录详细信息从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
    })

任何人都可以帮助我并向我展示如何使其按预期工作吗?

非常感谢任何帮助。

2 个答案:

答案 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会很好用。