【问题标题】:Python Script from Postman not working来自 Postman 的 Python 脚本不起作用
【发布时间】:2017-09-09 14:18:59
【问题描述】:

我买了一个小 wifi 中继模块 - 虽然它是中文的,我没有读过,但我已经研究了如何通过嵌入式 Web 服务器主页上的按钮打开和关闭中继。

然后我使用邮递员拦截器来捕获“打开”和“关闭”操作,现在我可以单击“发布”按钮来执行操作。

但是“生成代码”python 脚本不起作用,而且根据我的有限理解,没有正确的信息。

import requests

url = "http://192.168.4.1/"

payload = ""
headers = {
    'origin': "http://192.168.4.1",
    'upgrade-insecure-requests': "1",
    'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
    'content-type': "application/x-www-form-urlencoded",
    'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    'dnt': "1",
    'referer': "http://192.168.4.1/",
    'accept-encoding': "gzip, deflate",
    'accept-language': "en-US,en;q=0.8",
    'cache-control': "no-cache",
    'postman-token': "bece04e7-ee50-3764-ca50-e86d07ebc0f3"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

当我选择 HTTP 而不是 Python Requests 时的输出是

POST / HTTP/1.1
Host: 192.168.4.1
Origin: http://192.168.4.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Referer: http://192.168.4.1/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cache-Control: no-cache
Postman-Token: 0bd42b4f-067d-b5be-dd1c-b7e689196043

open_relay=%EF%BF%BD%F2%BF%AA%BC%CC%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD

有人可以建议如何修改 Python 以正确发送与 Postman 本身一起正常工作的 POST 吗?

【问题讨论】:

  • 我相信您需要将open_relay=%EF%BF%BD%F2%BF%AA%BC%CC%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD 放入您的python 代码中的payload 变量中。
  • 请注意,数据似乎是在 GB-2312 中编码的 URL 引用值。
  • 是的,将该文本粘贴到有效负载变量中有效 - 非常感谢 - 我是 SO 的新手 - 我如何标记已回答的问题,给予荣誉等?
  • @point5Clue 太好了,乐于助人! (欢迎来到 SO!)我已将我的评论移至答案,以便您可以单击复选标记以标记为已接受的答案(如果您愿意,还可以投票)。

标签: python postman


【解决方案1】:

您的 python 代码缺少包含设备命令的 POST 数据,该命令列在 http 请求的底部。

open_relay=%EF%BF%BD%F2%BF%AA%BC%CC%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD放入python代码中的payload变量中:

import requests

url = "http://192.168.4.1/"

payload = "open_relay=%EF%BF%BD%F2%BF%AA%BC%CC%B5%EF%BF%BD%EF%BF%BD%EF%BF%BD"
headers = {
  'origin': "http://192.168.4.1",
  'upgrade-insecure-requests': "1",
  'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
  'content-type': "application/x-www-form-urlencoded",
  'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  'dnt': "1",
  'referer': "http://192.168.4.1/",
  'accept-encoding': "gzip, deflate",
  'accept-language': "en-US,en;q=0.8",
  'cache-control': "no-cache",
  'postman-token': "bece04e7-ee50-3764-ca50-e86d07ebc0f3"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

【讨论】:

  • 事实上,我可以去掉所有标题信息并删除 'headers=...' 部分,它仍然可以正常工作 - 再次感谢。
猜你喜欢
  • 2020-05-21
  • 2016-05-06
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2018-02-22
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多