我有一个接受JWT身份验证请求的Web服务器.我正在try 编写一个客户端,使用Python套接字发送身份验证请求.然而,从服务器我收到了400个错误的请求.密码和邮箱是正确的,因为这只是一个例子.

server

from flask import Flask, request, abort

app = Flask(__name__)

@app.route("/auth", methods=["POST"])
def authenticate():
    print(request)
    if request.method == "POST":
        email = request.json.get("email")
        password = request.json.get("password")
        print(request)
        if not email or not password:
            return 400
        return 200
    else:
        abort(400)
        
if __name__ == "__main__":
    app.run(host='127.0.0.1', port=6000)

client

import socket

HOST = "127.0.0.1"  # The server's hostname or IP address
PORT = 6000  # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b"POST /auth HTTP/1.1\r\nHost:127.0.0.1:6000\r\nContent-Type: application/json \r\n")
    s.sendall(b"email=test@test.com&password=p455\r\n\r\n")
    data = s.recv(1024)

print(f"Received {data}")

推荐答案

让我们假设您确实想发布JSON.在服务器(Flask )端,您可以执行以下操作:

from flask import Flask, request, Response

app = Flask(__name__)

@app.route("/auth", methods=["POST"])
def authenticate():
    print(request)
    if request.method == "POST":
        if request.json:
            email = request.json.get("email")
            password = request.json.get("password")
            if email and password:
                print(f'{email=}')
                print(f'{password=}')
                return Response(status=200)
    return Response(status=400)
        
if __name__ == "__main__":
    app.run(host='127.0.0.1', port=6000)

在客户端,您需要完全重新构造代码,如下所示:

import socket

HOST = "127.0.0.1"  # The server's hostname or IP address
PORT = 6000  # The port used by the server
msg = '{"email":"test@test.com","password":"p455"}'
cl = len(msg)
pr = f'POST /auth HTTP/1.1\r\nHost:{HOST}:{PORT}\r\nContent-Type: application/json\r\nContent-Length: {cl}\r\n\r\n'
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall((pr+msg).encode())

Python相关问答推荐

大Pandas 胚胎中产生组合

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

输出中带有南的亚麻神经网络

什么相当于pytorch中的numpy累积ufunc

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

有没有一种方法可以从python的pussompy比较结果中提取文本?

Django RawSQL注释字段

如何在turtle中不使用write()来绘制填充字母(例如OEG)

判断solve_ivp中的事件

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

在Python中调用变量(特别是Tkinter)

在Python中计算连续天数

Python—转换日期:价目表到新行

如何在Python请求中组合多个适配器?

在用于Python的Bokeh包中设置按钮的样式

如何将一组组合框重置回无 Select tkinter?

使用嵌套对象字段的Qdrant过滤

一个telegram 机器人应该发送一个测验如何做?""

当输入是字典时,`pandas. concat`如何工作?

使用美汤对维基百科表格进行网络刮擦未返回任何内容