题
我写这篇文章是为了尝试登录论坛(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'>
把它在括号([])把它在列表环境,这是不是你想要的。
这将是与高电平“机械化”更容易的模块。
不隶属于 StackOverflow