web-dev-qa-db-ja.com

pythonのURLをurllib.urlencodeできません

この文字列を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
33
BillPull

それはその機能がすることではありません:

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

urllib.quote(callback)をお探しですか?

50
retracile

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'
10
Vicky

Python 3

Python 3では、quoteおよびurlencode機能はモジュールにあります urllib.parse

いくつかの例:

(un)quote

urllib.parse。quote

%xxエスケープを使用して、stringの特殊文字を置き換えます。

>>> import urllib.parse
>>> urllib.parse.quote('https://www.google.com/')
'https%3A//www.google.com/'

同様に、この操作を逆にするには、urllib.parse.unquoteを使用します。

urllib.parse。nquote

%xxエスケープを対応する単一文字に置き換えます。

>>> import urllib.parse
>>> urllib.parse.unquote('https%3A//www.google.com/')
'https://www.google.com/'

(un)quote_plus

urllib.parse。quote_plus

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を使用します。

urllib.parse。nquote_plus

Unquote()に似ていますが、HTMLフォームの値を引用符で囲まないために必要に応じて、プラス記号をスペースで置き換えます。

>>> import urllib.parse
>>> urllib.parse.unquote_plus('https%3A%2F%2Fwww.google.com%2F')
'https://www.google.com/'

urlencode

urllib.parse。rlencode

>>> import urllib.parse
>>> d = {'url': 'https://google.com', 'event': 'someEvent'}
>>> urrlib.parse.urlencode(d)
'url=https%3A%2F%2Fgoogle.com&event=someEvent'
0
ncw