вход на python на форуме
Вопрос
Я написал это, чтобы попытаться войти на форум (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
редактировать 2
Я изменил код с того, каким он был, на;
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.
Другие советы
Как насчет использования запятой между строкой, " http: ... "
и данными в кодировке urlen, [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'>
Помещение в квадратные скобки ([]) помещает его в контекст списка, а это не то, что вам нужно.
Это было бы проще с помощью высокоуровневого "механизировать" модуль.