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

조회수 6021회
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)
  • (•́ ✖ •̀)
    알 수 없는 사용자

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)
    
    

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

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)