POST基于行的文本数据:text / plain

时间:2017-09-29 19:46:37

标签: python http post python-requests

目前正在尝试使用Python脚本管理网站来控制物联网对象。

据我所知,控制正在进行两次:

  • 获取控制设备所需ID的POST方法。
  • 使用ID的POST方法

第一个使用此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)

1 个答案:

答案 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