2017-03-28 16 views
0

私はGETリクエストを処理するアプリケーションを持っています。ワイルドカードとして%を使用してクエリを行うためのパターンを保持する変数を読みました。 URLにpatt=M%が含まれている場合は、Mで始まるすべての名前を取得しています。検索パターンとして%D0を使用しようとするまでは、すべて正常に機能しました。私は次のエラーを取得:私はhttps://www.w3schools.com/tags/ref_urlencode.aspを使用して見つけてきたようにURLでのパーセント記号の処理

The given query string could not be processed. Query strings for this resource must be encoded with 'utf8'.

を、%D0文字列はUnicode以外の文字のコードとして扱われています。

ここで問題は:%D0のようなパターンをどのように処理するのですか?言い換えれば、これをエンコードせずに3文字として扱う方法は?私がこれまでに見つけた

つの回避策はpatt=%25Dを使用してのように、%25代わりの%を使用することです - しかし、私は実際に要求を処理する必要があると思います。

編集: 例を示します。 tutorialの基本的なcherrpyの例を見てみましょう。私はちょうどparamsを処理し、myvarの値を返すように変更されました:

import cherrypy 

class HelloWorld(object): 
    @cherrypy.expose 
    def index(self, **params): 
     #return "Hello world!" 
     return cherrypy.request.params['myVar'] 


if __name__ == '__main__': 
    cherrypy.quickstart(HelloWorld()) 

あなたがURLを開くことが実行しているしたら - デフォルトではhttp://localhost:8080/?myVar=blahblahblah

に開始する必要がありますこれは、ページを開いて返しますmyVarに値:blahblahblah

さて、これは私が予防したいエラーが発生しますhttp://localhost:8080/?myVar=%D0

を試してみてください。

もちろん、http://localhost:8080/?myVar=%25D0は正常に動作し、%D0を示します。

+0

意図したとおりにそれが働いています。 urlencodeされたすべてのURIパーツはcherrypyによって自動的に解読され、ハンドラに渡されます。通常、ブラウザは自動的にURLをurlencodeします。だから私はあなたが何を求めているのか分からない。カスタムクライアントをお持ちの場合は、もちろん適切なURLをエンコードする必要があります。 – webKnjaZ

+0

目的は、ブラウザのアドレスバーに必要なマスクを直接配置することでした。カスタムクライアントはありません。Chrome、Firefox、その他のブラウザのみ。しかし今、私はこれが単純に不可能であると思うようになり、次に自分自身をエンコードしてリダイレクトするテキストボックスを追加する必要があります。 – Maciejg

+0

アドレスバーに手動でクエリを入力するという意味ですか?入力があるフォームがあれば、自動的にエンコードする必要があります。 – webKnjaZ

答えて

1

次のようにURLにこれらの文字を処理するための引用メソッドを使用することができます。

import urllib 
print urllib.quote("patt=M%") 
+0

コードサンプルで質問を少し改善しました。それはurllibを使用していません。見てください。 – Maciejg

関連する問題