我写这篇文章是为了尝试登录论坛(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:..." 和 urlencoded 数据, [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