この文字列をurlencodeしようとするとこのエラーが発生するのはなぜですか
>>> callback = "http://localhost/application/authtwitter?twitterCallback"
>>> urllib.urlencode(callback)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/urllib.py", line 1261, in urlencode
raise TypeError
TypeError: not a valid non-string sequence or mapping object
それはその機能がすることではありません:
_urlencode(query, doseq=0)
Encode a sequence of two-element tuples or dictionary into a URL query string.
_
urllib.quote(callback)
をお探しですか?
PythonはPHPではありません。代わりに urllib.quote()
が必要です。
rlencode()
この関数は、2要素のタプルまたは辞書のみをエンコードします。
>>> import urllib
>>> dict = { 'First_Name' : 'Jack', 'Second_Name' : "West"}
>>> urllib.urlencode(dict)
'First_Name=Jack&Second_Name=West
quote_plus()
この関数はURL文字列をエンコードします
>>> import urllib
>>> url ="https://www.google.com/"
>>> urllib.quote_plus(url)
'https%3A%2F%2Fwww.google.com%2F'
Python 3では、quoteおよびurlencode機能はモジュールにあります urllib.parse
。
いくつかの例:
%xxエスケープを使用して、stringの特殊文字を置き換えます。
>>> import urllib.parse
>>> urllib.parse.quote('https://www.google.com/')
'https%3A//www.google.com/'
同様に、この操作を逆にするには、urllib.parse.unquoteを使用します。
%xxエスケープを対応する単一文字に置き換えます。
>>> import urllib.parse
>>> urllib.parse.unquote('https%3A//www.google.com/')
'https://www.google.com/'
Quote()に似ていますが、URLに入力するクエリ文字列を作成するときにHTMLフォームの値を引用するために必要なスペースをプラス記号で置き換えます。
>>> import urllib.parse
>>> urllib.parse.quote_plus('https://www.google.com/')
'https%3A%2F%2Fwww.google.com%2F'
同様に、この操作を逆にするには、urllib.parse.unquote_plusを使用します。
Unquote()に似ていますが、HTMLフォームの値を引用符で囲まないために必要に応じて、プラス記号をスペースで置き換えます。
>>> import urllib.parse
>>> urllib.parse.unquote_plus('https%3A%2F%2Fwww.google.com%2F')
'https://www.google.com/'
>>> import urllib.parse
>>> d = {'url': 'https://google.com', 'event': 'someEvent'}
>>> urrlib.parse.urlencode(d)
'url=https%3A%2F%2Fgoogle.com&event=someEvent'