【问题标题】:Creating a POST request in Python在 Python 中创建 POST 请求
【发布时间】:2019-09-22 20:46:52
【问题描述】:

对 Python 完全陌生,我正试图陷入困境,但我在处理请求时遇到了困难。我为一个小型加密货币项目运行一个节点,并尝试创建一个 python 脚本,该脚本可以抓取我的钱包值并将其电报给我一天一次,我已经管理了电报机器人,并且我已经使用 BeautifulSoup 练习了提取值从一个来源很好,它只是得到一个包含我的平衡的响应,这让我感到沮丧。

这是我余额所在的 URL:https://www.hpbscan.org/address/0x7EC332476fCA4Bcd20176eE06F16960b5D49333e/

值明显发生了变化,所以我认为我不能只对上面的页面做一个 get 请求并将其解析为漂亮的汤,所以我加载了开发者工具并看到有一个 post 请求:

方法: POST

网址: https://www.hpbscan.org/HpbScan/addrs/getAddressDetailInfo

请求标头:
主持人: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-Requested-With: XMLHttpRequest
内容类型:application/json;charset=utf-8
内容长度:46
DNT:1
连接:保持活动
推荐人:https://www.hpbscan.org/address/0x7EC332476fCA4Bcd20176eE06F16960b5D49333e/
编译指示:无缓存
缓存控制:无缓存

请求正文: [“0x7EC332476fCA4Bcd20176eE06F16960b5D49333e”]

响应(至少在浏览器中)是 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 格式?

任何帮助将不胜感激:)

【问题讨论】:

标签: python json python-3.x post python-requests


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    标题应该是字典

    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 字典,以便您可以继续在代码中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多