簡體   English   中英

請求 Python:傳遞有效負載 POST 請求

[英]Requests Python: Passing payload POST request

我正在自動化網絡設備的配置。 我必須登錄每個設備,更改網絡地址和密碼。 使用: 請求 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-Enconded :報告不同的錯誤: {"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

使用不同的網址:

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' codec can't encode characters in position 3426-3427: ordinal not in range(128)

打印r.encoding -> ISO-8859-1是輸出。

設置r.encoding="utf-8"print r.text輸出: UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 3426: ordinal not in range(128)

有人對這個庫有經驗嗎?

您可能需要在標題中傳遞用戶名和密碼。

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM