我想在POST调用中的列表中发送一些字符串。例如:
www.example.com/?post_data = A list of strings
python代码将数据作为单个字符串(而不是字符串列表)接收。如何将其作为字符串列表发布?
答案 0 :(得分:8)
在URL中没有“字符串列表”这样的东西(或者在HTTP中几乎没有任何东西 - 如果为同一个标题指定多个值,它们在大多数Web应用程序框架IME中作为单个分隔值出现) 。它只是一个字符串。我建议你以某种方式划分字符串(例如以逗号分隔),然后在另一端再次解析它们。
答案 1 :(得分:5)
TRY JSON(JavaScript Object Notation)它在python包中可用。 在这里找到:http://docs.python.org/library/json.html
您可以将列表编码为以JSON表示的数组,并附加到post参数。稍后将其解码回列表...
答案 2 :(得分:2)
如果您收到的大字符串只是分隔,那么您可以尝试拆分它。请参阅Splitting strings。
为了澄清,你得到了字符串的分隔列表,将该列表拆分成python列表,瞧!,你有一个python列表......
答案 3 :(得分:2)
你在说这个吗?
post_data= ",".join( list_of_strings )
答案 4 :(得分:2)
这取决于您的服务器格式化传入的参数。 例如,当zope收到这样的请求时: http://www.zope.org?ids:list=1&ids:list=2
您可以将ID作为列表获取。但此功能取决于服务器。如果您的服务器不支持某种解析和验证您的输入,您必须自己实现它。或者你使用zope。
答案 5 :(得分:2)
如果您不能或不想简单地用逗号分隔它们,并且您希望以更多列表方式发送它们。 我有一个我希望传递的数字列表,我在另一端使用PHP Web服务,我不想重建我的webservice,因为我使用了Zend Framework提供的常见多选元素。
这个例子适用于我和我的小整数,它会用你的字符串,我实际上不执行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)
答案 6 :(得分:1)
传递给POST语句的数据(据我所知)使用application / 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,您将看到POST的数据传递为:
s3=python&s2=love&s1=I
答案 7 :(得分:0)
像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
的子类)将查询字符串转换为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
您应该能够复制这些类并在项目中使用它们。 (我还没有检查所有依赖项)