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

조회수 4405회
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)
    
    

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

    이미지

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

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.