使用 Guzzle 从未命名字段远程登录 PHP

Remote login from an unnamed fields using Guzzle PHP

我想通过 Guzzle 远程连接到一个特定站点。用户名和密码字段没有名字的问题。

我的问题是:

  1. 我可以在不知道字段名称的情况下使用 POST 方法吗?
  2. 我可以改用 class 的名字吗?

我的代码:

Login.php

<?php
require("master/guzzle/vendor/autoload.php");

$username = "abc";
$password = "123456";

$client = new \GuzzleHttp\Client();

$response = $client->post('https://www.exmaple.com/login', [
    'body' => [
        'username' => $username,
        'password' => $password,
        'action' => 'login'
    ],
    'cookies' => true
]
);

echo $response;
?>

示例。com/login

<form>
    <div class="login-name">
        <div data-nep="Label" class="name-font default neptune_block_15yk4 neptune_LABEL-STANDARD_1h3i4">Username
            <div class="neptune_fade-after_15yk4"></div>
        </div>
        <div data-nep="TextBox">
            <input type="text" placeholder="" value="" class="neptune_default_1jbvk" style="height:30px">
            </div>
        </div>
        <div class="login-name">
            <div data-nep="Label" class="name-font default neptune_block_15yk4 neptune_LABEL-STANDARD_1h3i4">Password
                <div class="neptune_fade-after_15yk4"></div>
            </div>
            <div data-nep="TextBox">
                <input type="password" placeholder="" value="" class="neptune_default_1jbvk" style="height:30px">
                </div>
            </div>
        </form>

它是 ajax 登录表单吗?如果是这样,我认为在 fileds 中输入数据后,表单将调用原始登录控制器的 Ajax 调用。所以你必须找到那个请求和 post 参数名称

使用 Firefox 或 chrome 按 F12 也显示 Web Developer,转到网络面板并 select XHR 过滤 ajax 请求。

在你提交表单的情况下,有一个回调到另一个页面 单击右侧的 params 选项卡将显示您要查找的 post 数据。

$response = $client->request('POST', 'https://api.moodys.com/rest/mobile/oauth/token?client=0', [
    'form_params' => [
        'username' => 'test@gmail.com',
        'grant_type' => 'password',
        'password' => 'testpassword',
    ]
])