2017-01-31 136 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單引號可變。刪除它們,只是使用標準的字典。