2017-06-26 20 views
1

セッションクッキーを割り当てるWebサイトからデータを取得しようとしていて、URLに追加してデータにアクセスする必要のあるクラムコードが含まれています。クラム変数にバックスラッシュが含まれていると、問題に遭遇します(HTTP 401 Unauthorized)...クラムが変数であるため、先頭にrを追加する方法を見つけることができませんでした。 .encode( 'string-escape')と.replace( '\\'、 '\\\\')をcrumb変数に追加しようとしましたが、動作させることができません。URL文字列にバックスラッシュ文字を含む変数を追加するときのPythonエラー

私のコードは、Pythonの2.7で、次のようになります。

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  
opener.open('http://www.sample.com') 

#Some code here that looks for crumb code in HTML 

crumb = 'abc\xyz' 

#This line fails when crumb contains a backslash 
opener.open('http://www.sample.com/data=' + crumb) 

cj.clear() 

は、誰もが、私は、バックスラッシュが含まれているURL文字列を開こうとすると401エラーを回避する方法を知っていますか?

また、複数のクラムをループする場合は、セッションのCookieを消去する必要がありますか?

更新:バックスラッシュがHTMLの\ u002Fから取り込まれていることが判明しました。 URLに文字列を追加する前にスラッシュに変換するとうまくいくと思います。文字列中の\ u002Fを/に変換するには?

+0

'crumb = r'abc \ xyz''は十分ですか? – Nuageux

+0

私は思う*あなたはそのスラッシュをurlencodeする必要があります。 – idjaw

+0

[R/RCurlでバックスラッシュをURLエンコードする方法](https://stackoverflow.com/questions/26304172/how-to-url-encode-a-backslash-with-r-rcurl) – idjaw

答えて

0

"\"はPythonのエスケープ文字なので、特別な文字を含まない生の文字列にするには、文字列の前に "r"を追加する必要があります。あなたのコードは次のようになります

編集:URLの書式を正しく設定するには、「\」をエンコードする必要があります。だから "\"は "%5C"になります。

+0

詳細を追加する必要がありますが、その変数は最初のウェブサイトからHTMLを検索するので、r 'を追加することはできません。 Urlencodeを%5Cに設定すると、残念なことに同じエラーが表示されます。 –

+0

@InsuQああ大丈夫ですね、私はあなたを助けないのではないかと心配しています。バックスラッシュが含まれていないときに機能しますか? – isak

+0

はい、バックスラッシュがない場合は機能します。ドット(。)のような他の文字も、うまく通り抜けます。 –

0

crumb = r'abc\xyz'は使用できません。私はstr.encode('string-escape')機能が助けるかもしれないと信じています。試してください:

crumb = 'abc\xyz' 
crumb.encode('string-escape') 
+0

私は「string-encode」を試みたと私の質問で謝りました。私は、実際には、 'string-escape'を試しましたが、同じエラーが発生しました。インタプリタでは、入力されているものを印刷することができ、バックスラッシュがURLとして認識される前にすべてが「http://www.sample.com/data=abc">xyz」と表示されますが、残りの部分は表示されませんURLの一部として強調表示されます。私がエンコードしてバックスラッシュを%5Cに変換すると、文字列全体がURLとしてハイライト表示されますが、401エラーが表示されます。 –

関連する問題