我想在POST调用中的列表中发送一些字符串。例如:如何在帖子查询中传递一个python列表?
www.example.com/?post_data = A list of strings
python代码接收数据作为单个字符串(而不是字符串列表)。如何将其作为字符串列表发布?
我想在POST调用中的列表中发送一些字符串。例如:如何在帖子查询中传递一个python列表?
www.example.com/?post_data = A list of strings
python代码接收数据作为单个字符串(而不是字符串列表)。如何将其作为字符串列表发布?
在URL中没有这样的东西作为一个“字符串列表”(或者实际上是HTTP中的任何东西 - 如果您为同一个标头指定多个值,它们会在大多数Web应用程序框架中作为单个分隔值出现IME )。这只是一个单一的字符串。我建议你以某种方式(例如逗号分隔)分隔字符串,然后在另一端再次解析它们。
如果您收到的大字符串只是分隔,那么您可以尝试分割它。请参阅Splitting strings。
为了澄清,你得到的字符串分隔的列表,拆分列表为Python列表,瞧!你有一个Python列表...
如果字符串包含逗号,该怎么办?使用JSON或序列号将是最好恕我直言 – kender 2008-12-08 14:37:11
你在说什么吗?
post_data= ",".join(list_of_strings)
TRY JSON(JavaScript Object Notation)它在python包中可用。 在此处查找:http://docs.python.org/library/json.html
您可以将列表编码为以JSON表示的数组,并附加到post参数。后来解码回列表...
它取决于您的服务器来格式化传入的参数。例如,当zope得到这样的请求时: http://www.zope.org?ids:list=1&ids:list=2
你可以得到这个ID作为列表。但是这个功能取决于服务器。如果你的服务器不支持某种解析并验证你的输入,你必须自己实现它。或者你使用zope。
数据传递到POST语句是编码为键 - 值对,使用应用程序/ X WWW的窗体-urlencoded编码(据我理解)。
所以,我会认为你代表了你的字符串列表如下所示dictionnary:
>>> 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()
请注意,谷歌不会使用POST的搜索查询,但你会看到谷歌报告的错误。
如果运行是Wireshark,同时输入上述代码中,你将看到POST的数据被传递为:
s3=python&s2=love&s1=I
像django.utils.datastructures.MultiValueDict
的数据结构是表示这样的数据的清洁方式。 AFAIK它保留了订单。
>>> 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是使用django.http.QueryDict
(的MultiValueDict
子类)把一个查询字符串到蟒原语和背部。
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框架提供了一个共同的多选元素。
此示例工作正常,我和我的小整数,它会与你的琴弦,我actualy不执行urllib.quote(S),我只是做了STR(S)。
进口的urllib
import urllib
你刺的名单:
string_list = ['A', 'list', 'of', 'strings', 'and', 'öthér', '.&st,u?ff,']
连接在一起字符串列表与 'post_data [] =',也进行urlencode串
post_data = '&'.join('post_data[]='+urllib.quote(s) for s in string_list)
urllib.urlopen('http://example.com/',post_data)
以任何方式分隔字符串? – mepcotterell 2008-12-08 12:33:40
是的,他们是逗号分隔的。 (如通常的Python列表) – 2008-12-08 12:37:11
你想知道如何定义服务器(www.example.com)?还是你正在为一些已经存在的服务器编写客户端?如果您正在编写客户端,那么服务器API文档会说什么? – 2008-12-08 12:37:38