Frage

Ich habe das geschrieben, um zu versuchen und melden Sie sich auf ein Forum (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()

Allerdings, wenn ich laufe es es kommt mit;

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

Alle Ideen, wie diese zu lösen?

Bearbeiten

Hinzufügen von einem Komma zwischen der Zeichenfolge und die Daten gibt diesen Fehler stattdessen

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

Ich habe den Code geändert, was es war;

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()

Dies wirft keine Fehlermeldungen, es gibt nur drei Leerzeilen. Ist das, weil ich versuche, aus der Login-Seite zu lesen, die nach der Anmeldung verschwindet. Wenn ja, wie bekomme ich es den Index anzuzeigen, das ist das, was in nach der Kollision mit Protokoll erscheinen soll.

War es hilfreich?

Lösung

Ihre Zeile

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

ist semantisch ungültig Python. Vermutlich soll Sie

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

, die hat ein Komma, die Argumente zu trennen. Doch was Sie eigentlich wollen, ist einfach

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

, ohne versuchen Logindaten in eine Liste und mit der mehr up-to-date-Version von urlopen ist die urllib2 Bibliothek einzuschließen.

Andere Tipps

Wie wäre es ein Komma zwischen der Zeichenfolge, "http:..." und die urlencoded Daten, [logindata]?

Ihre URL-Zeichenfolge sollte nicht

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

Aber

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

Ich denke, da [] für Array ist und es eine ganze Zahl erfordern. Ich könnte falsch sein, weil ich nicht viel Python getan haben.

Wenn Sie einen Typen auf Logindaten tun, können Sie sehen, dass es eine Zeichenfolge ist:

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

Um es in Klammern ([]) bringt es auf den Listenkontext, das ist nicht das, was Sie wollen.

Dies wäre einfacher, mit dem High-Level "mechanisieren" -Modul.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top