我正在尝试使用urllib.urlencode对python中的字典进行urlencode.问题是,我必须编码一个数组.
结果必须是:
criterias%5B%5D=member&criterias%5B%5D=issue
#unquoted: criterias[]=member&criterias[]=issue
Run Code Online (Sandbox Code Playgroud)
但我得到的结果是:
criterias=%5B%27member%27%2C+%27issue%27%5D
#unquoted: criterias=['member',+'issue']
Run Code Online (Sandbox Code Playgroud)
我尝试过几件事,但似乎无法得到正确的结果.
import urllib
criterias = ['member', 'issue']
params = {
'criterias[]': criterias,
}
print urllib.urlencode(params)
Run Code Online (Sandbox Code Playgroud)
如果我cgi.parse_qs用来解码一个正确的查询字符串,我得到这个结果:
{'criterias[]': ['member', 'issue']}
Run Code Online (Sandbox Code Playgroud)
但如果我对该结果进行编码,则会得到错误的结果.有没有办法产生预期的结果?
我有一串原始HTTP,我想表示对象中的字段.有没有办法解析HTTP字符串中的各个标头?
'GET /search?sourceid=chrome&ie=UTF-8&q=ergterst HTTP/1.1\r\nHost: www.google.com\r\nConnection: keep-alive\r\nAccept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.45 Safari/534.13\r\nAccept-Encoding: gzip,deflate,sdch\r\nAvail-Dictionary: GeNLY2f-\r\nAccept-Language: en-US,en;q=0.8\r\n
[...]'
Run Code Online (Sandbox Code Playgroud) 我需要像这样的标题:
Authorization: Digest qop="chap",
realm="testrealm@host.com",
username="Foobear",
response="6629fae49393a05397450978507c4ef1",
cnonce="5ccc069c403ebaf9f0171e9517f40e41"
Run Code Online (Sandbox Code Playgroud)
并使用Python将其解析为:
{'protocol':'Digest',
'qop':'chap',
'realm':'testrealm@host.com',
'username':'Foobear',
'response':'6629fae49393a05397450978507c4ef1',
'cnonce':'5ccc069c403ebaf9f0171e9517f40e41'}
Run Code Online (Sandbox Code Playgroud)
有没有一个图书馆可以做到这一点,或者我可以寻找灵感的东西?
我在谷歌应用引擎上这样做,我不确定Pyparsing库是否可用,但如果它是最好的解决方案,我可以将它包含在我的应用程序中.
目前我正在创建自己的MyHeaderParser对象,并在头字符串上使用reduce().它工作,但非常脆弱.
以下是nadia的精彩解决方案:
import re
reg = re.compile('(\w+)[=] ?"?(\w+)"?')
s = """Digest
realm="stackoverflow.com", username="kixx"
"""
print str(dict(reg.findall(s)))
Run Code Online (Sandbox Code Playgroud) 我在这里遇到了问题.当我使用ajax将包含"+"的参数传递给我的控制器时,它将被空格替换.
例如,我将Tom+Jerry+Garfield使用ajax 传递value = .当我在我的控制器中使用System.out.println()时,它会显示Tom Jerry Garfield.我尝试使用其他特殊字符我似乎没有问题.
请帮忙.提前致谢.
我试图在我的正则表达式中结合 if else ,基本上如果字符串中存在某些模式,则捕获一种模式,如果没有,则捕获另一种模式。
字符串是:' https://www.searchpage.com/searchcompany.aspx?companyId=41490234&page=0&leftlink=true ”,我想提取'?
因此,如果 '?' 在字符串中检测到,正则表达式应该捕获 '?' 之后的所有内容。标记; 如果没有,则从头开始捕获。
我用过:'(.*\?.*)?(\?.*&.*)|(^&.*)'
但它没有用...
有什么建议吗?
谢谢!