Как правильно выполнить POST запрос в функции post с передачей параметра из текстового поля

Подскажите как правильно написать в запросе.

from tkinter import *
import requests


def clicked():
    res = f"Отправлено на номер"
    lbl.configure(text=res)



def send():
    clicked()
    post()



def post():
    url = 'https://bsms.tele2.ru/api/send?operation=send&login=&password=&msisdn=msisdn&shortcode=inpk&text=https://www.cnord.ru/myalarm.html'
    msisdn = txt.get()

window = Tk()
window.title("Добро пожаловать в приложение PythonRu")
window.geometry('400x250')
lbl = Label(window, text="Введите номер телефона c 7")
lbl.grid(column=0, row=0)
txt = Entry(window, width=10)
txt.grid(column=1, row=0)
txt.focus()
btn = Button(window, text="Отправить ссылку!", command=send)
btn.grid(column=2, row=0)
window.mainloop()

Ответы (2 шт):

Автор решения: humanian
r = requests.post(
'https://bsms.tele2.ru/api/send?operation=send&login=&password=msisdn=msisdn&shortcode'
'=inpk&text=https://www.cnord.ru/myalarm.html')

В таком виде работает

→ Ссылка
Автор решения: insolor

Хорошо, допустим, вы отправляете запрос как

r = requests.post(
'https://bsms.tele2.ru/api/send?operation=send&login=&password=msisdn=msisdn&shortcode'
'=inpk&text=https://www.cnord.ru/myalarm.html')

И вы спрашиваете, как это сделать более правильно, и как передать туда параметр msisdn, полученный из текстового поля.

Все параметры, которые идут внутри url после ? имеет смысл вынести в словарь и передавать их через params (документация):

params = dict(
    operation="send",
    login=".....",
    password=".....",
    msisdn=txt.get(),
    shortcode="inpk",
    text="https://www.cnord.ru/myalarm.html",
)

# Это аналогично такому словарю,
# но через dict легче читается и меньше раз нужно нажимать кавычку:
# params = {
#     'operation': 'send',
#     'login': '.....',
#     'password': '.....',
#     'msisdn': txt.get(),
#     'shortcode': 'inpk',
#     'text': 'https://www.cnord.ru/myalarm.html'
# }

r = requests.post("https://bsms.tele2.ru/api/send", params=params)

Ну и соответственно добавляете это в вашу функцию post:

def post():
    params = dict(
        operation="send",
        login=".....",
        password=".....",
        msisdn=txt.get(),
        shortcode="inpk",
        text="https://www.cnord.ru/myalarm.html",
    )

    r = requests.post("https://bsms.tele2.ru/api/send", params=params)
→ Ссылка