正确地url编码用户代理

时间:2012-11-14 00:50:33

标签: python string escaping urlencode

我是Python新手,似乎遇到了问题。我正在尝试对用户代理字符串进行urlencode ...

import urllib

UserAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3 Gecko/2008092417 Firefox/3.0.3'
print 'Agent: ' + UserAgent
print urllib.urlencode(UserAgent)

导致......

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3 Gecko/2008092417 Firefox/3.0.3
Traceback (most recent call last):
  File "D:\Source\SomePath\test.py", line 7, in <module>
    print urllib.urlencode(UserAgent)
  File "C:\Python26\lib\urllib.py", line 1254, in urlencode
    raise TypeError
TypeError: not a valid non-string sequence or mapping object
Press any key to continue . . .

我只能假设虽然UserAgent正在正确打印,但我要么在途中错过了一些字符串转义选项,要么在urllib.urlencode()上犯了一个根本性的错误?

2 个答案:

答案 0 :(得分:7)

urllib.urlencode需要一个映射或序列,每个映射或序列包含两个项目。可以在docs

中看到

在您的代码中,您需要执行以下操作:

urllib.urlencode({'Agent': UserAgent})

答案 1 :(得分:2)

Wessie打败了我。为了将来参考,您也可以这样做:

>>> help(urllib.urlencode)
Help on function urlencode in module urllib:

urlencode(query, doseq=0)
    Encode a sequence of two-element tuples or dictionary into a URL query string.

    If any values in the query arg are sequences and doseq is true, each
    sequence element is converted to a separate parameter.

    If the query arg is a sequence of two-element tuples, the order of the
    parameters in the output will match the order of parameters in the
    input.