Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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中创建POST请求时,是否需要将数据作为多部分/表单数据发送?_Python_Python 3.x_Post - Fatal编程技术网

在python中创建POST请求时,是否需要将数据作为多部分/表单数据发送?

在python中创建POST请求时,是否需要将数据作为多部分/表单数据发送?,python,python-3.x,post,Python,Python 3.x,Post,我正在为一位朋友编写一个非常简单的Python应用程序,该应用程序将查询服务并获取一些数据。我可以很容易地管理GET请求,但是我在处理POST请求时遇到了问题。我只是稍微修改了他们的示例JSON数据,但当我发送它时,我得到了一个错误。以下是代码(标识信息已更改): 我从他们的API文档中获得了类数据 正如我所说,我可以很好地获取请求,但是这个POST请求给了我一个500错误,其中包含以下文本: Content type 'application/x-www-form-urlencoded;cha

我正在为一位朋友编写一个非常简单的Python应用程序,该应用程序将查询服务并获取一些数据。我可以很容易地管理GET请求,但是我在处理POST请求时遇到了问题。我只是稍微修改了他们的示例JSON数据,但当我发送它时,我得到了一个错误。以下是代码(标识信息已更改):

我从他们的API文档中获得了类数据

正如我所说,我可以很好地获取请求,但是这个POST请求给了我一个500错误,其中包含以下文本:

Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
在研究此错误时,我的假设是,上述错误意味着我需要以多部分/表单数据的形式提交数据。我想测试这个假设是否正确,但stock Python似乎没有任何简单的方法来创建多部分/表单数据——有一些模块,但它们似乎都获取一个文件并将其转换为多部分/表单数据,而我只想将这个简单的JSON数据转换为测试


这就引出了两个问题:我是否认为我需要多部分/表单数据才能正确工作?如果是这样,我是否需要将JSON数据放入一个文本文件中,并使用其中的一个模块将其转换为多部分,或者是否有某种方法可以在不创建文件的情况下实现这一点

也许您想尝试请求库,您可以传递一个
文件
参数,然后请求将发送一个多部分/表单数据POST,而不是应用程序/x-www-form-urlencoded POST。但是,您不限于使用该词典中的实际文件:

import requests
response = requests.post('http://httpbin.org/post', files=dict(foo='bar'))
print response.status_code
如果您想了解更多关于请求库的信息,特别是在发送多部分表单时,请查看以下内容:


您可以使用
io.StringIO
在内存中创建类似文件的对象,并使用它代替文件。但我认为模块<代码>请求可能是更好的解决方案。请原谅我的无知-我开始走这条路,但停止了,因为我不知道如何将build\u opener方法与请求结合使用。我实际上是在一个build\u opener对象上调用open(),但我不认为我可以在build\u opener对象上调用post()或任何东西。如果您想发出authenticated请求,可以调用requests post方法,如下所示:
requests.post('http://httpbin.org/post,files=dict(foo='bar'),auth=HTTPBasicAuth('username','password'))
因此您根本不必使用urllib。
import requests
response = requests.post('http://httpbin.org/post', files=dict(foo='bar'))
print response.status_code