如何使用默认网关路由器 5268AC 的设备访问代码请求数据?

How can I request data with device access code for default gateway router 5268AC?

我想编写一个脚本,可以从路由器收集数据,在本例中为 5268AC。到目前为止,我已经能够使用 response.get() 从不需要设备访问代码来查看信息的 URL 中获取信息。要获取有关 Wifi 的信息,例如默认 SSID,我需要通过浏览器输入位于路由器上的访问代码。我在尝试 request.post(url).

时不断收到错误 500

url="http://192.168.1.254/xslt?PAGE=C_2_1"

根据检查,我相信这是我要填写的表格。键值是 ADM_PASSWORD.

              <h2>Login</h2>
              <p>Device access code required. Please enter the device access code, then click Submit.</p>
              <form name="pagepost" method="post" action="xslt?PAGE=login_post" id="pagepost">
                <input type="hidden" name="NONCE" value="0abc59f54121398" />
                <input type="hidden" name="THISPAGE" value="" />
                <input type="hidden" name="NEXTPAGE" value="C_2_1" />
                <input type="hidden" name="CMSKICK" value="" />
                <div>
                  <div class="form-group">
                    <label for="ADM_PASSWORD">Access code</label>
                    <span>
                      <input type="password" id="ADM_PASSWORD" name="ADM_PASSWORD" size="16" maxlength="16" autofocus="autofocus" required="required" autocomplete="off" />
                    </span>
                  </div>
                </div>
                <p align="right">
                  <input type="submit" class="button" value="Submit" />

我试过了,但出现 500 状态错误。

payload = { 'ADM_PASSWORD':'*access code*' }
response = requests.post(url, headers=headers, data=payload)

有没有一种方法可以通过请求而不是使用 GUI 来收集信息?

首先在 Chrome/Firefox 中,您可以使用 DevTools(选项卡:Network)查看登录时浏览器发送的内容。

表格有 action="xslt?PAGE=login_post" 所以你应该发送到

url = "http://192.168.1.254/xslt?PAGE=login_post"

它是相对路径 - 所以如果你打开页面即。 http://http://192.168.1.254/login/ 那么就需要

url = "http://192.168.1.254/login/xslt?PAGE=login_post"

您必须发送您在表格中看到的所有 input - 特别是 hidden.
有时甚至可能需要 submit.

你应该使用 name= 作为键,而不是 id=

payload = { 
    'NONCE': '0abc59f54121398',
    'THISPAGE': '',
    'NEXTPAGE': 'C_2_1',
    'CMSKICK': '',
    'ADM_PASSWORD': '*access code*' 
}

如果您将 post()data=json= 一起使用,那么它应该会自动在 Content-TypeContent-Length 中设置正确的值,而您没有将其设置为 headers.


您也可以先 运行 get() 使用表单进行分页,因为它可能会设置 server/device 也可能会检查的 cookie。


仅当页面使用 JavaScript 在 form 中生成一些额外数据时才会出现问题,并且它需要使用 Selenium - 但它需要全部使用 Selenium


有时我向 https://httpbin.org/post 发送请求,它会将所有 headers、cookies、post 数据发回给我,我可以将其与我看到的数据进行比较在 DevTools.

最终我使用本地代理服务器 Charles 并在浏览器和 Python 中使用它来查看代码是否发送与浏览器相同的数据。