使用Requests Python库传递POST请求的负载(payload)

4
我正在自动配置网络设备。我需要登录每个设备,更改网络地址和密码。 使用:Requests Python模块
首先需要做的是登录。这是一个简单的表单。通过检查网站,我将分析所需的标头和参数。
General:
Request URL:http://192.168.7.2:8000/api/login
Request Method:POST
Status Code:200 OK
Remote Address:192.168.7.2:8000
Referrer Policy:no-referrer-when-downgrade

Response Headers:
Transfer-Encoding:chunked

Request Headers:
POST /api/login HTTP/1.1
Host: 192.168.7.2:8000
Connection: keep-alive
Content-Length: 37
Accept: application/json, text/plain, */*
Origin: http://192.168.7.2:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://192.168.7.2:8000/login.html
Accept-Encoding: gzip, deflate
Accept-Language: pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7

Request Payload:
{"user":"user","password":"password"}

根据我得到的文档,我得到了以下代码:

import requests
import json

url = "http://192.168.7.2:8000/api/login"
payload = {"user":"admin","password":"admin"}
r = requests.post(url,data=payload)
#r.encoding = "UTF-8"
print r.text

发生了什么?运行脚本后,我收到了这个输出:{"errno":"20"} ,如果我使用错误的用户名/密码登录,也会出现相同的错误。但是,在Web界面中使用这个用户名/密码进行身份验证是成功的。我认为代码有问题。
更改有效载荷格式:相同的错误{"errno":"20"}
payload = (("user","admin"),("password","admin"))
r = requests.post(url,data=payload)
#r.encoding = "UTF-8"
print r.text

JSON编码: 报告不同的错误:{"errno":"0","key":"fc2d253fb9b25d5880dd4843f439bc7b"}

import requests
import json

url = "http://192.168.7.2:8000/api/login"
payload = {"user":"admin","password":"admin"}
r = requests.post(url,data=json.dumps(payload))
#r.encoding = "UTF-8"
print r.text

直接传递json: 报告 {"errno":"0","key":"6f7ed0ae5f14833f689fcb34c2bf5b77"}

import requests
import json

url = "http://192.168.7.2:8000/api/login"
payload = {"user":"admin","password":"admin"}
r = requests.post(url,json=payload)
#r.encoding = "UTF-8"
print r.text

使用不同的URL:

import requests
import json

url = "http://192.168.7.2:8000/login.html"
payload = {"user":"admin","password":"admin"}
r = requests.post(url,data=payload)
#r.encoding = "UTF-8"
print r.text

这是一份报告 UnicodeEncodeError: 'ascii'编解码器无法对位置3426-3427的字符进行编码:序数不在范围内(128)

打印r.encoding -> ISO-8859-1 是输出结果。

设置r.encoding="utf-8" 并且 print r.text 输出:UnicodeEncodeError: 'ascii'编解码器无法对位置3426的字符进行编码:序数不在范围内(128)

有人使用过这个库吗?

1个回答

0

你可能需要在头部传递用户名和密码。

import requests
import json

url = "http://192.168.7.2:8000/api/login"
headers = {"user":"admin","password":"admin"}
r = requests.post(url, headers=headers)

print r.text.encode('utf-8')

1
仍然返回{"errno":"20'"}。你认为问题可能是设备固件吗? - Shinomoto Asakura
负载在哪里? - Harsha Biyani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接