使用请求Python lib和dict of dict的post请求时出现问题

使用请求Python lib和dict of dict的post请求时出现问题,python,json,simplejson,python-requests,Python,Json,Simplejson,Python Requests,我是Python新手,我需要构建一个Python库,该库连接到我们的API服务,发送一些json数据,一切正常,但有一件事,我需要发送一些dict,执行POST请求: def create_project(self, project): print project params = simplejson.dumps(project) print params req = requests.post(self.url+'/pr

我是Python新手,我需要构建一个Python库,该库连接到我们的API服务,发送一些json数据,一切正常,但有一件事,我需要发送一些dict,执行POST请求:

    def create_project(self, project):
        print project
        params = simplejson.dumps(project)
        print params
        req = requests.post(self.url+'/projects/addSpeedy.json',
            data=params, 
            auth=HTTPBasicAuth(self.api_id, self.api_key),verify=False)
        data = simplejson.loads(req.text)
        return data
我传递给该函数的项目参数包含以下结构:

    script = {
        'part001': 'HI',
        'part002': 'WORLD'
    }
    project = {
        'title': 'Project posted from Python Carrot',
        'script': script,
        'remarks': "I want the voice be similar to Bugs Bunny.",
        'test': '1'
    }
然而,当执行请求时,API告诉我缺少所需的“title”字段,但是当在函数中打印数据时,一切似乎都很好,在这种情况下,我在请求站点中看到了dict json编码:


我尝试过其他方法,但结果参差不齐。它没有按应有的方式工作,而且问题不在于API,因为我们有其他语言的库,而且工作正常。

很难猜测,如果没有关于http客户端和服务器API的详细信息,会出现什么问题。我的第一次调试尝试是抓取并检查您生成的请求是否与其他客户端实现时生成的请求相同,并回答以下问题:

  • 有些标题不同吗
  • 是否正确指定了内容长度和内容类型
  • 身份验证是否成功,或者缺少标题的响应是否被广泛使用

    • 很难猜测,如果没有关于http客户端和服务器API的详细信息,会出现什么问题。我的第一次调试尝试是抓取并检查您生成的请求是否与其他客户端实现时生成的请求相同,并回答以下问题:

      • 有些标题不同吗
      • 是否正确指定了内容长度和内容类型
      • 身份验证是否成功,或者缺少标题的响应是否被广泛使用


      此python 2.x是否使用urllib2?你不需要在收到回复之前发送请求吗?此外,您可能希望确保包含内容类型标题。也许:req.add_header('Content-Type','application/json')当您添加'.json'时,API检测到它必须用json响应请求,而且我还有其他可以正常工作的请求后函数,请求的问题是当我使用dict of dict时。API也回答了一个错误。我发送的数据不是连接问题。您考虑过使用库吗?Korylprince这是我正在扩展的库:)这是python 2.x使用urllib2吗?你不需要在收到回复之前发送请求吗?此外,您可能希望确保包含内容类型标题。也许:req.add_header('Content-Type','application/json')当您添加'.json'时,API检测到它必须用json响应请求,而且我还有其他可以正常工作的请求后函数,请求的问题是当我使用dict of dict时。API也回答了一个错误。我发送的数据不是连接问题。你考虑过使用库吗?Korylprince这是我扩展的库:)正如我之前告诉monkut的那样,问题不在于连接,而在于我发送的数据,我使用了其他请求的请求,它工作正常,如本例:
      def quote(self,params):req=requests.post(self.url+'/projects/quote.json',params,auth=HTTPBasicAuth(self.api_id,self.api_key),verify=False)data=simplejson.load(req.text)return data
      我尝试连接的API是VoiceBunny API,即使这样,我也会开始调试并比较最终传输的数据。您是否已经查看了请求的普通正文并检查了它是否是有效的json?可能数据周围缺少一些括号?您的API是否可能只理解特定的qu字段名的旋转“而不是”,simplejson会使用错误的字段名?观察实际的网络流量会立即显示这些细微的差异。谢谢!在将脚本参数作为str发送之前,我尝试了另一种方法,但我在json str中使用了“not”,它起了作用!
      script='{“part001”:“嗨”,“part002”:“WORLD”,“part003:“LOL”}’
      另外需要指出的是,在我调试了API在请求中接收到的内容后,数据丢失了。我不知道为什么,因为我使用的是请求文档中建议的方法。我只是快速查看了一下。它只提到了这些引号
      ,因此,如果您的服务器不理解其他请求,也没关系,但丢失数据确实很奇怪。正如我之前告诉monkut的那样,问题不在于连接,而在于我发送的数据,我使用了其他请求的请求,并且工作正常,如本例:
      def quote(self,params):req=requests.post(self.url+'/projects/quote.json',params,auth=HTTPBasicAuth(self.api\u id,self.api\u key),verify=False)data=simplejson.load(req.text)return data
      我尝试连接的API是VoiceBunny API,即使这样,我也会开始调试并比较最终传输的数据。您是否已经查看了请求的普通正文并检查了它是否是有效的json?可能数据周围缺少一些括号?您的API是否可能只理解特定的qu字段名的旋转“而不是”,simplejson会使用错误的字段名?观察实际的网络流量会立即显示这些细微的差异。谢谢!在将脚本参数作为str发送之前,我尝试了另一种方法,但我在json str中使用了“not”,它起了作用!
      script='{“part001”:“嗨”,“part002”:“WORLD”,“part003:“LOL”}’
      另外一点需要指出的是,在我调试了API在请求中接收到的内容之后,数据丢失了。我不知道为什么,因为我使用的是请求文档中建议的方法。我只是快速查看了一下。它只提到了这些引号