Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python调用后抛出400个错误请求_Python_Rest_Curl - Fatal编程技术网

Python调用后抛出400个错误请求

Python调用后抛出400个错误请求,python,rest,curl,Python,Rest,Curl,我正在编写一个python脚本,该脚本将调用REST POST端点,但作为响应,我收到了400个错误请求,其中,如果我使用curl执行相同的请求,它将返回200 OK。下面是python脚本的代码片段 import httplib,urllib def printText(txt): lines = txt.split('\n') for line in lines: print line.strip() httpServ = httplib.HTTPConnection(

我正在编写一个python脚本,该脚本将调用REST POST端点,但作为响应,我收到了400个错误请求,其中,如果我使用curl执行相同的请求,它将返回200 OK。下面是python脚本的代码片段

import httplib,urllib
def printText(txt):
  lines = txt.split('\n')
  for line in lines:
      print line.strip()

httpServ = httplib.HTTPConnection("127.0.0.1", 9100)
httpServ.connect()

params = urllib.urlencode({"externalId": "801411","name": "RD Core","description": "Tenant create","subscriptionType": "MINIMAL","features":   {"capture":False,"correspondence": True,"vault": False}})

 headers = {"Content-type": "application/json"}
 httpServ.request("POST", "/tenants", params, headers)
 response = httpServ.getresponse()
 print response.status, response.reason
 httpServ.close()
相应的curl请求是

curl-iX POST\
-H'内容类型:应用程序/json'\
-d'
{
“外部化”:“801411”,
“名称”:“RD核心种子数据测试”,
“说明”:“核心团队种子数据测试租户”,
“subscriptionType”:“最小”,
“特点”:{
“捕获”:错误,
“通信”:正确,
“保险库”:假
}
}' http://localhost:9100/tenants/

现在我无法找出python脚本中的问题所在。

尝试使用
请求
(使用
pip安装请求安装
),而不是
urllib

另外,在请求正文中将数据作为
JSON
封装,不要将它们作为URL参数传递。您也在
curl
示例中传递
JSON
数据

import requests


data = {
    "externalId": "801411",
    "name": "RD Core",
    "description": "Tenant create",
    "subscriptionType": "MINIMAL",
    "features": {
        "capture": False,
        "correspondence": True,
        "vault": False
    }
}

response = requests.post(
    url="http://localhost:9100/tenants/",
    json=data
)

print response.status_code, response.reason
编辑

发件人:

注意,如果传递了
数据
文件
,则会忽略
json
参数

在请求中使用
json
参数将更改
内容类型
application/json
的标题中


代码中的问题是,您将
内容类型
标题设置为
application/json
,而不是以json格式发送数据

 import httplib, json

 httpServ = httplib.HTTPConnection("127.0.0.1", 9100)
 httpServ.connect()
 headers = {"Content-type": "application/json"}
 data = json.dumps({
    "externalId": "801411",
    "name": "RD Core",
    "description": "Tenant create",
    "subscriptionType": "MINIMAL",
    "features": {
        "capture": False,
        "correspondence": True,
        "vault": False
    }
 })
 # here raw data is in json format
 httpServ.request("POST", "/tenants", data, headers)
 response = httpServ.getresponse()
 print response.status, response.reason
 httpServ.close()

请不要在你的问题中添加任何形象。请复制并粘贴文本,而不是文本的图像到你的问题中。我建议复制并粘贴你的代码到帖子中,不要使用截图。这将使人们能够更快地帮助您,因为他们可以测试您的代码。删除屏幕截图并添加python代码片段Hanks,我的错误是因为在请求:-)中使用
data
而不是
json
,在请求中有相同的问题。put-错误地传递了数据={},这在http 400中失败-当我使用json={}它成功了。谢谢你setevoy,Dusan Madar