python requests로 post 처리를 하고 싶어요.

조회수 2651회

flask로 만든 제 홈페이지에 파이썬 requests를 통해서 접근하고 싶어요.

import requests

URL = 'http://cyphers.herokuapp.com'
payload = {
    'myName': '착한어른이',
}

session = requests.session()
r = requests.post(URL, data=payload)
print(r.text)

그러나 결과값은 다음과 같습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

html 코드입니다.

<p class="a">
      <form action = "./output" method = "post">
         <p>닉네임을 입력하세요:</p>
         <p><input type = "text" name = "myName" /></p>
         <p><input type="radio" name="gametype" value="rating" checked="checked">공식
         <input type="radio" name="gametype" value="normal">일반</p>
         <p><input type = "submit" value = "submit" /></p>
      </form>
</p>

어디를 잘못 지정한 건가요?

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

1 답변

  • http://cyphers.herokuapp.com은 닉네임을 입력해서 전적을 검색하는 폼을 보여주는 화면이고, 그 폼이 (그리고 새로 작성하고 계신 스크립트가) 접근하려는 POST 요청은 http://cyphers.herokuapp.com/output/으로 보내는 것 아닌지요? 그렇다면 주신 소스에서 URL

    URL = 'http://cyphers.herokuapp.com/output/'
    

    으로 바꾸시면 처리가 될 것 같네요.


    + 어디가 잘못되었는가?: HTTP 405는 "지금 그 방식(method)으로는 이 리소스에 접근할 수 없다"라는 에러입니다. cyphers.herokuapp.com/POST 요청을 보낼 수 없게 지정되어 있는가 봅니다. (@app.route() 대신 @app.get()만 썼다든지)

    + 지금 http://로 시작하는 heroku 주소를 사용하고 계신데, 사실 헤로쿠는 HTTPS를 지원합니다. https://cyphers.herokuapp.com으로 바꿔서 사용하시기를 추천합니다.

    • 정말 최고에요. 지난번에 말씀해주신 flask로 웹사이트도 완성했구요! asyncio부분도 덕분에 완성할 수 있었습니다. 이번에도 너무 많은 도움 받아가네요! 알 수 없는 사용자 2019.8.26 18:36

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

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

(ಠ_ಠ)
(ಠ‿ಠ)