2017-01-31 138 views
1

如何使用Resuests lib在python上发布RAW数据? 我正在尝试登录。Python请求发布json原始数据

的Json投掷异常

类型错误:组([' “clienteLogin”:{ “令牌”: “b94261f7e6744380919d406f576110cc”, “Operador”: “”, “IdUnidadeNegocio”:5 “PalavraCaptcha”:” ”, “Senha”: “muranga21”, “cadastro”: “上”, “电子邮件”: “[email protected]”}, “mesclarCarrinho”:真正的 “令牌”: “b94261f7e6744380919d406f576110cc”, “IdUnidadeNegocio”:5 “Operador”: “”}“])不是JSON序列

体原料(邮差)

{ ”clienteLogin“:{ ”令牌“ : “cbf36fb0e3de4b65ab0037303979a806”, “Operador”: “”, “IdUnidadeNegocio”:5, “PalavraCaptcha”: “”, “Senha”: “muranga21”, “cadastro”: “上”, “电子邮件”:“xazune @ car101。亲 “},” mesclarCarrinho “:真正的” 令牌 “:” 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":"[email protected]"},"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 
+1

'data'可以是字符串或Python字典,并请求将其转换为字符串。你创建'set()'是因为'{}'也用于创建'set()',如果你不使用键和值。 – furas

+0

我是新来的蟒蛇我需要做什么来解决? –

回答

2

没有{}

data = '{"clienteLogin":"Token":"'+token+'","Operador":"","IdUnidadeNegocio":5,"PalavraCaptcha":"","Senha":"muranga21","cadastro":"on","Email":"[email protected]"},"mesclarCarrinho":true,"Token":"'+token+'","IdUnidadeNegocio":5,"Operador":""}' 

或字典和requests用细绳将其转换成字符串。

data = { 
    "clienteLogin": { 
     "Token": token, 
     "Operador": "", 
     "IdUnidadeNegocio": 5, 
     "PalavraCaptcha": "", 
     "Senha": "muranga21", 
     "cadastro": "on", 
     "Email": "[email protected]" 
    }, 
    "mesclarCarrinho": True, 
    "Token": token, 
    "IdUnidadeNegocio": 5, 
    "Operador":"", 
} 

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

data = { 
    "clienteLogin": { 
     "Token": token, 
     "Operador": "", 
     "IdUnidadeNegocio": 5, 
     "PalavraCaptcha": "", 
     "Senha": "muranga21", 
     "cadastro": "on", 
     "Email": "[email protected]" 
    }, 
    "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', ... } 

BTW:req3.json()转换为Python字典

data = req3.json() 

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

您附上您的data单引号可变。删除它们,只是使用标准的字典。