I have made at fasstapi at https://lectio-fastapi.herokuapp.com/docs#/
from fastapi import FastAPI
from starlette.responses import JSONResponse
from . import lectio
app = FastAPI()
@app.get("/")
def read_root():
    return {'msg': 'welcome to the lectio-fastapi', 'success': True}
@app.post("/school_ids/{lectio_school_name}")
def get_school_id(lectio_school_name: str):
    json_object = lectio.lectio_search_webpage_for_schools(lectio_school_name)
    return JSONResponse(content=json_object)
@app.post("/message_send/{lectio_school_id, lectio_user, lectio_password}")
def test_login(lectio_school_id: int, lectio_user: str, lectio_password: str):
    browser = lectio.get_webdriver()
    lectio_login_result = lectio.lectio_login(lectio_school_id, lectio_user, lectio_password, browser)
    return lectio_login_result
@app.get("/message_send/")
def send_msg():
    return {'msg': 'message_send function for lectio', 'success': True}
@app.post("/message_send/{lectio_school_id, lectio_user, lectio_password, send_to, subject, msg, msg_can_be_replied}")
def send_msg(lectio_school_id: int, lectio_user: str, lectio_password: str, send_to :str, subject: str, msg: str, msg_can_be_replied: bool):
    browser = lectio.get_webdriver()
    lectio_login_result = lectio.lectio_login(lectio_school_id, lectio_user, lectio_password,browser)
    if lectio_login_result['success']:
        lectio_send_msg_result = lectio.lectio_send_msg(send_to, subject, msg, msg_can_be_replied, lectio_school_id, browser)
        return lectio_send_msg_result
    else:
        return {'msg': 'Login failed, wrong username, password and school_id combination ', 'success': False}
def main():
    pass
if __name__ == "__main__":
    main()
When I test on the fastapi site it works like a charm.
But when I try to access it from another python program i get 405 when posting
import requests
from requests.structures import CaseInsensitiveDict
API_ENDPOINT = "https://lectio-fastapi.herokuapp.com/" #link to fastapi
def lectio_root():
    url = API_ENDPOINT
    print(url)
    headers = CaseInsensitiveDict()
    headers["accept"] = "application/json"
    headers["Content-Type"] = "application/json"
    resp = requests.get(url, headers=headers)
    print(resp.text)
    return resp
def lectio_send_msg(lectio_school_id: int, lectio_user: str, lectio_password: str, send_to :str, subject: str, msg: str, msg_can_be_replied: bool):
    url = API_ENDPOINT+"message_send/"
    print(url)
    headers = CaseInsensitiveDict()
    headers["accept"] = "application/json"
    headers["Content-Type"] = "application/json"
    payload = '{"lectio_school_id": ' + str(lectio_school_id) + ', "lectio_user": ' + lectio_user + ', "lectio_password": ' + lectio_password + ', "send_to": ' + send_to + ', "subject": ' + subject + ', "msg": ' + msg + ', "msg_can_be_replied": ' + str(msg_can_be_replied) + '}'
    resp_get = requests.get(url, headers=headers)
    resp_post = requests.post(url, data=payload, headers=headers)
    print(resp_get.text)
    print(resp_get)
    print(resp_post.text)
    return resp_post
def main():
    lectio_school_id = 235
    lectio_user = 'test_user'
    lectio_password = 'test_password'
    send_to = 'Mr test'
    subject = 'test subject'
    msg = 'test msg'
    msg_can_be_replied = False
    print(lectio_root())
    print(lectio_send_msg(lectio_school_id, lectio_user, lectio_password, send_to, subject, msg, msg_can_be_replied))
if __name__ == '__main__':
    main()
the output I am getting is:
https://lectio-fastapi.herokuapp.com/
{"msg":"welcome to the lectio-fastapi","success":true}
<Response [200]>
https://lectio-fastapi.herokuapp.com/message_send/
{"msg":"message_send function for lectio","success":true}
<Response [200]>
{"detail":"Method Not Allowed"}
<Response [405]>
And I am expecting to get these returns:
{'success': True}
{'msg': 'Login failed, wrong username, password and school_id combination ', 'success': False}
It seems like to me I need to define something more in FastAPI to get my post function to work. But not sure what is missing.
 
    