Python的请求400错误使用JSON
我使用下面的代码,以便在API端点注册用户:Python的请求400错误使用JSON
import argparse
import requests
import ConfigParser
import json
import sys
import logging
#from collections import OrderedDict
#from cs-check-user.py import get
# Configuration Parameters
env = 'Pre_internal'
Config = ConfigParser.ConfigParser()
Config.read("../etc/config.ini")
endpoint = Config.get(env, 'endpoint')
admin_user = Config.get(env, 'admin_user')
admin_password = Config.get(env, 'admin_password')
# Logging Config
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)s %(name)s %(message)s',
filename='../logs/create_user.log')
# Functions
def post(login, email, password):
login_ok = login.lower()
#data = OrderedDict([('login',login_ok),
# ('email', email),
# ('password', password)])
#data_ok = json.dumps(data, sort_keys=False)
#data = '{"login": login, "email": email, "password": password}'
#create_user = requests.post(endpoint, data, auth=(admin_user, admin_password))
data = {"login": login_ok, "email": email, "password": password}
headers = {'Content-Type': 'application/json'}
create_user = requests.post(endpoint, data=json.dumps(data), headers=headers, auth=(admin_user, admin_password))
if create_user.status_code == 202:
print 'User has been created successfully'
logging.info('User has been created successfully %s', login_ok)
sys.exit(0)
else:
print 'Error Received: ', create_user
logging.error('Received error when creating the user %s %s', login_ok, create_user)
sys.exit(1)
# Main
parser = argparse.ArgumentParser(description='''Script to create users in Cloud Storage''', epilog='''Example: ./cs-create-user.py -l dsmc -e [email protected] -p changeme''')
parser.add_argument('-l', '--login', help='Login account')
parser.add_argument('-e', '--email', help='Email account')
parser.add_argument('-p', '--password', help='Password account')
args = parser.parse_args()
if not args.login:
print 'Login incomplete'
if not args.password:
print 'Password incomplete'
if not args.email:
print 'Email incomplete'
else:
# Check user
#try:
# get(args.login)
#except SystemExit as exc:
# if exc.code == 0:
# print 'The user already exists, please select another login.'
# sys.exit(1)
# else:
post(args.login, args.password, args.email)
#
# post(args.login, args.password, args.email)
sys.exit(0)
后三小时,我不知道为什么我收到400所有的时间!我认为这个问题与json格式有关,但是为什么?
请帮帮我。
非常感谢您提前。
我在https://httpbin.org/的帮助下对此进行了调试。首先,我复制你的curl命令发送有:
curl -v -u aa:bb -X POST httpbin.org/post -H "Accept: application/json; version=0" -H "Content-Type:application/json" -d '{"login": "username", "password": "secret", "email":"my_email"}'
,它返回:
{
"args": {},
"data": "{\"login\": \"username\", \"password\": \"secret\", \"email\":\"my_email\"}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json; version=0",
"Authorization": "Basic YWE6YmI=",
"Content-Length": "63",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.43.0"
},
"json": {
"email": "my_email",
"login": "username",
"password": "secret"
},
"origin": "197.155.4.24",
"url": "http://httpbin.org/post"
}
然后我修改您的代码发送到同一个地方相当于要求,通过argparse传递参数之后。答案看起来很相似。我比较了两种与PyCharm的功能“剪贴板比较”(尽管任何差异的工具会做),问题变得清晰:
你周围的密码和电子邮件在你的代码交换!我很抱歉。
,在你的代码中你不使用变量,我认为我的问题是相关的变量和JSON,请你能写一个例子吗?非常感谢你。 –
@JoséLuis我发布的唯一'代码'是curl命令。其余的是数据。我在说你的代码可能很好,但是你混淆了密码和电子邮件的参数,即你有'post(args.login,args.password,args.email)'而且'def post(登录,电子邮件,密码)'。这篇文章的其余部分仅仅是说明我是如何计算出来的,因为我认为这个技术很有趣,值得了解。 –
@亚历克斯,非常感谢,是的,现在!!!!!!是一个愚蠢的问题,我没有看到! Httpbin是一个很好的工具,我不知道它! –
什么是端点?它是否有我们可以查看的API文档? –
对不起,但是我没有文档的私人终端。我使用以下curl来创建用户以避免python: --- curl -v -u aa:bb -X POST http:// ip:port/api/customer/-H“Accept:application/json; version = 0“-H”Content-Type:application/json“-d”{“login”:“login”,“password”:“ejemplo”,“email”:“[email protected]”}' –