문제

포럼 (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

edit2

나는 코드를 그것이 무엇으로 바꾸 었는지를 변경했다.

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

의미 적으로 유효하지 않은 파이썬입니다. 아마도 당신은 의미합니다

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

]는 배열을위한 것이고 정수가 필요하기 때문에 생각합니다. 나는 많은 파이썬을하지 않았기 때문에 틀렸을 수도 있습니다.

logindata에서 유형을 수행하면 문자열임을 알 수 있습니다.

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

괄호 ([])에 넣으면 목록 컨텍스트에 넣습니다.

높은 수준의 "기계화"모듈에서는 더 쉬울 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top