2017-05-07 9 views
0

私はCTFに入ろうとしていますが、ctf.slothparadise.comというWebベースのCTFスキルを実践するためのクールなWebサイトが見つかりました。私は4つのフラッグスを手に入れましたが、そのうちの2人が私に指を与えています。そして悲しいことに、良いOl 'Pythonのスキルを磨き上げなければなりませんでした。Python urllib module TypeError

import urllib.error 
import urllib.request 
import urllib.parse 
import urllib 
import sys 

while True: 
     about_page = urllib.request.urlopen("http://ctf.slothparadise.com/about.php").read() 
     if "KEY" in about_page: 
      print(about_page) 
      sys.exit(0) 

ctf.slothpython.com/about.phpは私がプログラミングてるページです、それはソースコード内のキーのすべての1000人の訪問者を出してくれる。バカになって1000まで爽快にする代わりに、コード "KEY"がページのソースコードに現れるまで、ページを開いたままにしておきたいと思ってコードを書きました。

私はこの取得しています:私は、私はおそらく間違った形式で「KEY」を持っていることが推測しているTypeErrorsについて知っているから:(「str」はバッファインタフェースをサポートしていない例外TypeErrorが)

を?私は本当にわかりません、私も適切なモジュールを使用していない可能性がありますが、私は通常、これは別のモジュールに分割された古いurllib2モジュールので、私はこれらの新しいモジュールに行く学習です。

TypeErrorsの解釈が間違っていても私を修正しても問題が解決しない場合は、この問題の修正にお手伝いをしてください。

+1

明らかに、 'urlopen'はすでにページの内容を返します。ファイルのようなオブジェクトではなく' read'を返します。 – ForceBru

+0

本当に別の方法が必要な場合を除き、['requests'](http://docs.python-requests.org/ja/master/user/quickstart/)を使ってください。 – roganjosh

答えて

0

urllib.request.urlopenhttp.client.HTTPResponseオブジェクトを返し、そのオブジェクトのreadは符号化bytesオブジェクトを返します。デコードする方法は、返されたhttpヘッダーにある場合もあれば、htmlのmetaタグに埋め込まれている場合もあります。この特定のテストのhtmlを解析したくないと思われるので、bytesオブジェクトb'KEY'を探してください。

私はあなたが次のデータで何をしたいのか分かりませんが、うまく印刷したり、htmlをスキャンしたりするには、解析する必要があります。

import urllib.error 
import urllib.request 
import urllib.parse 
import urllib 
import sys 

while True: 
     about_page = urllib.request.urlopen("http://ctf.slothparadise.com/about.php").read() 
     if b"KEY" in about_page: 
      print(about_page) 
      sys.exit(0) 
1

urlopen()によって返されるオブジェクト。read()acts like a context manager

正しく使用していません。

はそのような何か試してみてください:

import urllib.request 
while True: 
    with urllib.request.urlopen('http://ctf.slothparadise.com/about.php') as response: 
     html = response.read() 
     if b"KEY" in html: 
      print(html) 
      sys.exit(0) 
0

をこれはあなたのコードの作業をしなければならない

about_page=str(urllib.request.urlopen("http://ctf.slothparadise.com/about.php").read())

で文字列about_pageください。お役に立てれば!!

関連する問題