目前正在尝试使用Python脚本管理网站来控制物联网对象。
据我所知,控制正在进行两次:
第一个使用此Python脚本,ID显示在响应中。
import requests
url = 'http://local_IP/login.cgi'
payload = {'lgname': 'theLogin', 'lgpin': 'thePin'}
r = requests.post(url, data=payload)
对于第二个POST(在用户登录时控制设备),我使用Wireshark捕获了命令,这里是信息:
POST /user/keyfunction.cgi HTTP / 1.1 \ r \ n
Content-Type:text / plain; charset = UTF-8 \ r \ n
参考者:http://LOCAL_IP/login.cgi \ r \ n
然后我有:
基于行的文本数据:text / plain
SESS = IDReceivedWithTheFirstPOST&安培; COMM = 80安培;数据0 = 2及DATA2 = 18&安培; DATA1 = 1
所以基本上,我需要一种方法在Python中使用这个"基于行的文本数据进行POST:text / plain"但我不知道如何处理它。
希望你能够帮助我,
谢谢,
巴普蒂斯特
编辑:如果有一天它可以帮助任何人,这是我的工作代码:
import requests
from collections import OrderedDict
session = requests.Session()
url = 'http://LOCAL_IP/login.cgi'
payload = {'lgname': 'User', 'lgpin': 'Password'}
r_login = session.post(url, data=payload)
with open('data.txt', 'w') as output:
output.write(r_login.text)
text = 'function getSession(){return'
with open('./data.txt', 'rb') as f:
for line in f:
if line.find(text) == 1:
id = line.split()[2][1:17]
print(id)
data = OrderedDict()
data['sess']=id
data['comm']=80
data['data0']=2
data['data2']=1
data['data1']=16
url = 'http://LOCAL_IP/user/keyfunction.cgi'
r_keyfunction = session.post(url, data=data)
with open('data2.txt', 'w') as output:
output.write(r_keyfunction.text)
答案 0 :(得分:0)
根据OP结果更新以使用requests.Session()
使用requests.Session()
将捕获所有Cookie并在后续请求中转发它们。它还可以连接连接并完成许多其他很酷的事情。
import requests
session = requests.Session()
payload = {'lgname': 'theLogin', 'lgpin': 'thePin'}
r_login = session.post('http://local_IP/login.cgi', data=payload)
# Figure out the ID here somehow
id_thing = 'IDReceivedWithTheFirstPOST'
payload = {
'sess': id_thing,
'comm': 80,
'Data0': 2,
'data2': 18,
'data1': 1
}
r_keyfunction = session.post('http://local_IP/user/keyfunction.cgi', params=payload)
# do something here