質問

フォーラム(phpBB3)にログオンしようとするためにこれを書きました。

import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
output = page.read()

ただし、実行すると次のようになります。

Traceback (most recent call last):
  File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
    page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
TypeError: string indices must be integers

これを解決する方法についてのアイデアはありますか?

編集

文字列とデータの間にコンマを追加すると、代わりにこのエラーが発生します

Traceback (most recent call last):
  File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
    page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login",[logindata])
  File "C:\Python25\lib\urllib.py", line 84, in urlopen
    return opener.open(url, data)
  File "C:\Python25\lib\urllib.py", line 192, in open
    return getattr(self, name)(url, data)
  File "C:\Python25\lib\urllib.py", line 327, in open_http
    h.send(data)
  File "C:\Python25\lib\httplib.py", line 711, in send
    self.sock.sendall(str)
  File "<string>", line 1, in sendall
TypeError: sendall() argument 1 must be string or read-only buffer, not list

edit2

コードを変更しました;

import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)
output = page.read()

これはエラーメッセージをスローせず、3行の空白行を表示するだけです。これは、ログイン後に消えるログインページから読み込もうとしているからです。

役に立ちましたか?

解決

あなたの行

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])

は意味的に無効なPythonです。おそらくあなたは

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login", [logindata])

引数をコンマで区切る。ただし、実際に必要なのは

page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)

logindataをリストに入れようとせず、urlopenの最新バージョンを使用するのはurllib2ライブラリです。

他のヒント

文字列&quot; http:...&quot; とurlencodeされたデータ [logindata] の間にコンマを使用するのはどうですか?

URL文字列は次のようにしないでください

"http://www.woarl.com/board/ucp.php?mode=login"[logindata]

しかし

 "http://www.woarl.com/board/ucp.php?mode=login", logindata

[]は配列用であり、整数が必要だからだと思います。 Pythonをたくさんやったことがないので間違っているかもしれません。

logindataでタイプを実行すると、それが文字列であることがわかります。

>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>

角かっこ([])で囲むと、リストコンテキストに入れられますが、これは望みではありません。

これは、高レベルの「機械化」により簡単になります。モジュール。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top