【发布时间】:2021-11-02 15:53:53
【问题描述】:
我将以下 JSON 发布到我的 Flask 服务器:
{"comment": "astute observation", "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", "cookie": "ua=f8256d37159e3faf28ae61a6406601c3; platform=pc; bs=bxa7ziiq07dufk31prvoo0mbfm44sayh; ss=994139249854417186; il=v1qyca8PU7X6jSwgiqceXsySwWB60HnCjSJ1HjNmsSxRUxNjQzNjA3OTEycUVTTFoxWUpSZDFTZ3kwclIzenBHa19FbnlmMTlIN0hZeHNDQ1FOLQ..; expiredEnterModalShown=1", "parent": "860245961"}
当从 Postman 发送时,请求可以完美运行。但是,当从我的 C# 应用程序发送时,服务器会返回 400 Bad Request 错误代码。
var data = $"{{\"comment\": \"{text}\", \"ua\": \"{userAgent}\", \"cookie\": \"{cookie}\", \"parent\": \"{parent}\"}}";
var url = "http://127.0.0.1:5000/";
var request = HttpWebRequest.CreateHttp(url);
request.Method = "POST";
request.ContentType = "application/json";
await using var sw = new StreamWriter(request.GetRequestStream());
await sw.WriteAsync(data);
var response = await request.GetResponseAsync();
为了确保 JSON 格式正确,我设置了一个断点并检查了“数据”变量。我将该值复制/粘贴到 Postman 中,将 Content-Type 设置为 application/json,请求从那里成功,但在我的 C# 应用程序中失败。
服务器代码:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def process():
print(request.json)
return 'Hello'
app.run(debug=True)
编辑:发布后,我意识到我没有从我的 C# 应用程序发送用户代理。我尝试添加一个,但服务器仍然响应 400 Bad Request 错误。
编辑 2:我尝试简化数据变量以进行测试。 var data = "{\"msg\": \"david\"}"; 和设置 request.ContentLength = data.Length,仍然有同样的问题。真奇怪。
【问题讨论】:
-
不熟悉 C# 中的这种字符串变体 - 以 $ 开头的字符串。数据是用替换的内容扩展出来的,还是在其他地方完成的
-
能否提供
data的最终值的样本? -
@FranzGleichmann 它包含在我的帖子中,取自设置断点并从我的 IDE 复制数据值。
-
@cup 是一个模板字符串,相关行执行后的数据值包含在我的帖子顶部。双大括号在这里计算为单大括号,因为单大括号用于注入变量。处理 JSON 时有点混乱,但它会生成一个有效的 JSON 字符串(与我使用 Postman 发送的字符串相同,但没有收到 400 Bad Request)。