вход на форум python - PullRequest
       24

вход на форум python

3 голосов
/ 26 ноября 2008

Я написал это, чтобы попытаться войти на форум (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

есть идеи, как это решить?

1010 * редактировать *

добавление запятой между строкой и данными выдает эту ошибку вместо

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 пустых строки. Это потому, что я пытаюсь прочитать со страницы входа в систему, которая исчезает после входа в систему. Если так, как мне заставить его отображать индекс, который должен отображаться после нажатия входа в систему.

Ответы [ 5 ]

5 голосов
/ 26 ноября 2008

Ваша линия

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.

1 голос
/ 26 ноября 2008

Если вы введете тип для logindata, вы увидите, что это строка:

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

Помещение в скобки ([]) помещает его в контекст списка, а это не то, что вам нужно.

1 голос
/ 26 ноября 2008

Как насчет использования запятой между строкой, "http:..." и данными в кодировке urlen, [logindata]?

1 голос
/ 26 ноября 2008

Ваша строка URL не должна быть

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

Но

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

Я думаю, потому что [] для массива и требует целое число. Я могу ошибаться, потому что я не так много делал на Python.

0 голосов
/ 27 ноября 2008

Это было бы проще с высокоуровневым модулем механизации.

...