Вопрос

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top