파이썬3 urllib 로그인 관련 질문입니다!


from urllib.parse import urlencode
from urllib.request import Request,urlopen
from urllib import *

url = "https://dshs.kr:44919/bbs/login.php" #daeshin high
login_form = {"회원아이디":"_______","패스워드":"_______"}
login_req = urlencode(login_form)#convert dictionary to query string
request = Request(url, login_req)
response = urlopen(request)

위에가 제가 짠 코드이고 다음과 같은 오류가 뜹니다.

Traceback (most recent call last):
  File "C:\Users\SeungYoun\Desktop\URL_Request.py", line 9, in <module>
    response = urlopen(request)
  File "C:\Python34\lib\urllib\request.py", line 161, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python34\lib\urllib\request.py", line 461, in open
    req = meth(req)
  File "C:\Python34\lib\urllib\request.py", line 1112, in do_request_
    raise TypeError(msg)
TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
>>> 

여기서 질문이

다음이 의미하는 바를 잘 모르겠고 그래서 오류가 뜨는 이유도 모르겠습니다.

request = Request(url, login_req)
  • 2016년 07월 15일에 작성됨

조회수 386


1 답변


오류내용을 읽어보면 POST 값은 str형식은 될수없고 bytes 형식만 된다고 하네요

encode('utf-8) 로 utf-8형식으로 인코딩을해버리면 bytes로 바뀌게 됩니다

from urllib.parse import urlencode
from urllib.request import Request,urlopen
from urllib import *

url = "https://dshs.kr:44919/bbs/login.php" #daeshin high
login_form = {"회원아이디":"_______","패스워드":"_______"}

# 지금은 STR 형식입니다. STR은 안된다 하니까
login_req = urlencode(login_form)#convert dictionary to query string

# UTF-8 형식으로 인코딩해버리면 bytes로 바뀝니다
login_req = login_req.encode('utf-8')

request = Request(url, login_req)

response = urlopen(request)

이렇게 추가하면 안되던게 되네요~

이미지

  • 2016년 07월 15일에 수정됨
  • 2016년 07월 15일에 작성됨
    웹을 좋아함

  • 감사합니다!!!    신승윤   2016.7.15 21:10     
  • 죄송합니다만 비번하고 아이디좀 공백처리 해주실수 있나요 제가 실수로 올려서 ㅠ    신승윤   2016.7.15 21:20     
  • 억. 죄송합니다 몰랐네요/. 테스트인줄알고    김하하   2016.7.15 23:38     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close