在Python中创建POST请求

在Python中创建POST请求,python,json,python-3.x,post,python-requests,Python,Json,Python 3.x,Post,Python Requests,对于Python来说,这是一个全新的概念,我正试图陷入其中,但我在处理请求。我为一个小型加密货币项目运行了一个节点,并试图创建一个python脚本,它可以刮取我的钱包值并每天给我发一次电报,我管理了电报机器人,我还与BeautifulSoup一起练习从源代码中提取值。很好,只是得到了一个包含我的余额的响应,这让我很沮丧 以下是我的余额所在的URL: 该值显然发生了变化,因此我不认为我可以对上面的页面执行get请求并将其解析为beautiful soup,因此我加载了开发人员工具并看到有一个pos

对于Python来说,这是一个全新的概念,我正试图陷入其中,但我在处理请求。我为一个小型加密货币项目运行了一个节点,并试图创建一个python脚本,它可以刮取我的钱包值并每天给我发一次电报,我管理了电报机器人,我还与BeautifulSoup一起练习从源代码中提取值。很好,只是得到了一个包含我的余额的响应,这让我很沮丧

以下是我的余额所在的URL:

该值显然发生了变化,因此我不认为我可以对上面的页面执行get请求并将其解析为beautiful soup,因此我加载了开发人员工具并看到有一个post请求:

方法:发布

网址:

请求头:
主持人:www.hpbscan.org
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:69.0)Gecko/20100101 Firefox/69.0
接受:/
接受语言:en-GB,en;q=0.5
接受编码:gzip,deflate,br
X-request-With:XMLHttpRequest
内容类型:application/json;字符集=utf-8
内容长度:46
DNT:1
连接:保持活动状态
推荐人:
Pragma:没有缓存
缓存控制:无缓存

请求正文: [“0x7EC332476FCA4BCD20176EE06F16960B5D4933E”]

响应(至少在浏览器中)是JSON格式的数据,确实包含我需要的余额

到目前为止,我一直在尝试重新创建上述请求:

import requests
import json

url = "https://www.hpbscan.org/HpbScan/addrs/getAddressDetailInfo"
payload = '["0x7EC332476fCA4Bcd20176eE06F16960b5D49333e"]'
headers = """
    'Host': 'www.hpbscan.org'
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'
    'Accept': '*/*'
    'Accept-Language': 'en-GB,en;q=0.5'
    'Accept-Encoding': 'gzip, deflate, br'
    'X-Requested-With': 'XMLHttpRequest'
    'Content-Type': 'application/json;charset=utf-8'
    'Content-Length': '46'
    'DNT': '1'
    'Connection': 'keep-alive'
    'Referer': 'https://www.hpbscan.org/address/0x7EC332476fCA4Bcd20176eE06F16960b5D49333e/'
    'Pragma': 'no-cache'
    'Cache-Control': 'no-cache'
"""

data = requests.post(url, data=payload, headers=headers)
print(data.text)
我以前从未使用过请求,所以我有点不知所措,我尝试过根据我看到的其他人所做的事情来摆弄东西,但这没有用,目前我得到的是“AttributeError:'str'对象没有属性'items'

我认为这可能是因为我没有正确指定请求头和主体,或者可能是因为响应是json格式的,而我的代码无法理解

非常感谢您的帮助:)

您应该将“标题”从字符串更改为dict。下面是您的最终代码:

import requests
import json

url = "https://www.hpbscan.org/HpbScan/addrs/getAddressDetailInfo"
payload = '["0x7EC332476fCA4Bcd20176eE06F16960b5D49333e"]'
headers = {
    'Host': 'www.hpbscan.org',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
    'Accept': '*/*',
    'Accept-Language': 'en-GB,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/json;charset=utf-8',
    'Content-Length': '46',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Referer': 'https://www.hpbscan.org/address/0x7EC332476fCA4Bcd20176eE06F16960b5D49333e/',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache'}

data = requests.post(url, data=payload, headers=headers)
print(data.text)

标题应该是字典

import requests
import json

url = "https://www.hpbscan.org/HpbScan/addrs/getAddressDetailInfo"
payload = '["0x7EC332476fCA4Bcd20176eE06F16960b5D49333e"]'
headers = {
    'Host': 'www.hpbscan.org',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
    'Accept': '*/*',
    'Accept-Language': 'en-GB,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/json;charset=utf-8',
    'Content-Length': '46',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Referer': 'https://www.hpbscan.org/address/0x7EC332476fCA4Bcd20176eE06F16960b5D49333e/',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache'}

data = requests.post(url, data=payload, headers=headers)
print(json.loads(data))

最后一位将从浏览器获得的响应转换为python字典,以便您可以继续在代码中使用它。

尝试将标题更改为
dict
。请阅读