如何在post查询中传递python列表?

如何在post查询中传递python列表?,python,web-services,Python,Web Services,我想在POST通话中发送列表中的一些字符串。例如: www.example.com/?post_data = A list of strings python代码以单个字符串(而不是字符串列表)的形式接收数据。如何将其发布为字符串列表?在URL中没有“字符串列表”这样的东西(或者在HTTP中的任何内容中,如果您为同一个标题指定多个值,那么在大多数web应用程序框架中,它们将以单个分隔值的形式出现)。这只是一根线。我建议您以某种方式对字符串进行分隔(例如逗号分隔),然后在另一端再次对其进

我想在POST通话中发送列表中的一些字符串。例如:

    www.example.com/?post_data = A list of strings

python代码以单个字符串(而不是字符串列表)的形式接收数据。如何将其发布为字符串列表?

在URL中没有“字符串列表”这样的东西(或者在HTTP中的任何内容中,如果您为同一个标题指定多个值,那么在大多数web应用程序框架中,它们将以单个分隔值的形式出现)。这只是一根线。我建议您以某种方式对字符串进行分隔(例如逗号分隔),然后在另一端再次对其进行解析。

如果您接收的大字符串只是分隔的,那么您可以尝试拆分它。看


为了澄清这一点,您得到了带分隔符的字符串列表,将该列表拆分为python列表,瞧!,你有一个python列表…

你在谈论这个吗

post_data= ",".join( list_of_strings )
试试JSON(JavaScript对象表示法),它在python包中提供。 请在此处查找:


您可以将列表编码为JSON表示的数组,并附加到post参数。稍后将其解码回列表…

根据您的服务器设置传入参数的格式。 例如,当zope收到如下请求时:


您可以将ID作为列表获取。但此功能取决于服务器。如果您的服务器不支持某种类型的解析和验证输入,您必须自己实现它。或者使用zope。

传递到POST语句的数据(据我所知)使用应用程序/x-www-form-urlencoded编码作为键值对进行编码

因此,我假设您将字符串列表表示为以下单词:

>>> my_string_list= { 's1': 'I',                                                
...     's2': 'love',                                                           
...     's3': 'python'                                                          
... }                   
然后,将其作为参数传递给POST就像阅读urllib的文档一样困难

>>> import urllib
>>> print urllib.urlopen( 'http://www.google.fr/search', 
       urllib.urlencode( my_string_list ) 
    ).read()
请注意,google不使用POST进行搜索查询,但您将看到google报告的错误

如果在键入上述代码的同时运行WireShark,您将看到传递的帖子数据如下:

 s3=python&s2=love&s1=I
像这样的数据结构是表示此类数据的干净方法。好吧,这样可以维持秩序

>>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']})
>>> d['name']
'Simon'
>>> d.getlist('name')
['Adrian', 'Simon']
>>> d.get('lastname', 'nonexistent')
'nonexistent'
>>> d.setlist('lastname', ['Holovaty', 'Willison'])
Django正在使用(MultiValueDict的子类)将查询字符串转换为python原语并返回

from django.http import QueryDict

qs = 'post_data=a&post_data=b&post_data=c'

query_dict = QueryDict(qs)

assert query_dict['post_data'] == 'c'
assert query_dict.getlist('post_data') == ['a', 'b', 'c']
assert query_dict.urlencode() == qs

您应该能够复制这些类并在项目中使用它们。(虽然我没有检查所有依赖项)

如果您不能或不想用逗号将它们分开,并且希望以更具列表风格的方式发送它们。 我有一个我想要传递的数字列表,我在另一端使用一个PHP Web服务,我不想重建我的Web服务,因为我使用了Zend Framework提供的一个公共multiselect元素

这个例子适用于我和我的小整数,它将用于字符串,我实际上不执行urllib.quote,我只执行str

导入URL库

import urllib
您的毒刺列表:

string_list = ['A', 'list', 'of', 'strings', 'and', 'öthér', '.&st,u?ff,']
将字符串列表与“post_data[]=”连接在一起,并对字符串进行URL编码

post_data = '&'.join('post_data[]='+urllib.quote(s) for s in string_list)
派驻


字符串是否以任何方式分隔?是的,它们以逗号分隔。(和通常的python列表一样)您想知道如何定义服务器(www.example.com)吗?或者您正在为某个已经存在的服务器编写客户端?如果您正在编写客户机,服务器API文档会说什么?如果字符串包含逗号怎么办?最好使用JSON或序列化,imhoCherryPy也会做类似的事情:如果它收到?x=foo&x=bar,那么它会给你[“foo”,“bar”]作为x的值。但正如你所说,这是特定于服务器的。对不起,第一次在这里,我会得到更好的。答应我!
urllib.urlopen('http://example.com/',post_data)