【问题标题】:Python requests post json raw dataPython 请求发布 json 原始数据
【发布时间】:2017-06-17 12:49:28
【问题描述】:

如何在 python 上使用 Resuests lib 发布 RAW DATA? 我正在尝试登录。

Json 抛出异常

TypeError: set(['"clienteLogin":{"Token":"b94261f7e6744380919d406f576110cc","Operador":"","IdUnidadeNegocio":5,"PalavraCaptcha":"","Senha":"muranga21", "cadastro":"on","Email":"xazune@car101.pro"},"mesclarCarrinho":true,"Token":"b94261f7e6744380919d406f576110cc","IdUnidadeNegocio":5,"Operator":""}'] ) 不是 JSON 可序列化的

原始身体(邮递员)

{"clienteLogin":{"Token":"cbf36fb0e3de4b65ab0037303979a806","Operador":"","IdUnidadeNegocio":5,"PalavraCaptcha":"","Senha":"muranga21","cadastro":" on","Email":"xazune@car101.pro"},"mesclarCarrinho":true,"Token":"cbf36fb0e3de4b65ab0037303979a806","IdUnidadeNegocio":5,"Operador":""}

代码

import requests,json
import cookielib
from lxml import html



s = requests.session()
req1 = s.get("https://carrinho.extra.com.br/Checkout?ReturnUrl=http://www.extra.com.br#login")
content1 = req1.content
tree = html.fromstring(content1)
token = tree.xpath("//script")[0].text.split('"')[1]
data = {
'"clienteLogin":{"Token":"'+token+'","Operador":"","IdUnidadeNegocio":5,"PalavraCaptcha":"","Senha":"muranga21","cadastro":"on","Email":"xazune@car101.pro"},"mesclarCarrinho":true,"Token":"'+token+'","IdUnidadeNegocio":5,"Operador":""}'
 }
headers = {
'Content-Type':'application/json'
}

req3 = s.post("https://carrinho.extra.com.br/Api/checkout/Cliente.svc/Cliente/Login",json.dumps(data),headers=headers)

print req3.content

【问题讨论】:

  • data 可以是字符串或 python 字典,请求将其转换为字符串。您创建 set(),因为如果您不使用内部的键和值,{} 也用于创建 set()
  • 我是 python 新手,需要解决什么问题?

标签: python json python-2.7 request python-requests


【解决方案1】:

使用不带{}的字符串

data = '{"clienteLogin":"Token":"'+token+'","Operador":"","IdUnidadeNegocio":5,"PalavraCaptcha":"","Senha":"muranga21","cadastro":"on","Email":"xazune@car101.pro"},"mesclarCarrinho":true,"Token":"'+token+'","IdUnidadeNegocio":5,"Operador":""}'

或字典和requests 会将其转换为字符串。

data = {
    "clienteLogin": {
        "Token": token,
        "Operador": "",
        "IdUnidadeNegocio": 5,
        "PalavraCaptcha": "",
        "Senha": "muranga21",
        "cadastro": "on",
        "Email": "xazune@car101.pro"
    },
    "mesclarCarrinho": True,
    "Token": token,
    "IdUnidadeNegocio": 5,
    "Operador":"",
}

编辑:你不需要 json.dumps()header - requestsjson=

data = {
    "clienteLogin": {
        "Token": token,
        "Operador": "",
        "IdUnidadeNegocio": 5,
        "PalavraCaptcha": "",
        "Senha": "muranga21",
        "cadastro": "on",
        "Email": "xazune@car101.pro"
    },
    "mesclarCarrinho": True,
    "Token": token,
    "IdUnidadeNegocio": 5,
    "Operador":"",
}

url = "https://carrinho.extra.com.br/Api/checkout/Cliente.svc/Cliente/Login"
req3 = s.post(url, json=data)

print(req3.json())

结果:

{'EfetuarLoginResult': {'DataNascimentoAno': '1984', ... }

顺便说一句: req3.json() 转换为 python 字典

data = req3.json()

print(data['EfetuarLoginResult']['DataNascimentoAno'])

【讨论】:

  • requestsjson= 谢谢!!!我在搞乱所有这些旧的建议,并在你的回答中绊倒了。那个信息很关键。 ?
【解决方案2】:

您已将 data 变量括在单引号中。删除它们并使用标准字典。

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2019-03-25
    • 2011-11-27
    • 2022-01-23
    相关资源
    最近更新 更多