#c# #flask
Вопрос:
Я отправляю следующий 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"}
При отправке от почтальона запрос работает безупречно. Однако при отправке из моего приложения на C#, например, сервер возвращает код ошибки 400 неверных запросов.
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, установил тип содержимого в 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 плохих запросов об ошибке.
Правка 2: Я попытался упростить переменную данных для целей тестирования. var data = "{"msg": "david"}";
и установка request.ContentLength = data.Length
, все та же проблема. Действительно странно.
Комментарии:
1. Не знаком с этим вариантом строк в C# — тот, который начинается с $. Расширяются ли данные при замене содержимого или это делается где-то еще
2. не могли бы вы предоставить образец окончательной стоимости
data
?3. @FranzGleichmann Это включено в мой пост, который был взят из установки точки останова и копирования значения данных из моей среды разработки.
4. @cup Это строка шаблона, значение данных после выполнения соответствующей строки указано в верхней части моего поста. Двойные фигурные скобки здесь соответствуют одинарным фигурным скобкам, поскольку одинарные фигурные скобки используются для ввода переменных. Немного запутанно, когда имеешь дело с JSON, но это создает действительную строку JSON (ту же, которую я отправляю с почтальоном и не получаю 400 плохих запросов).
Ответ №1:
Очень странно, но это решило проблему. Использование класса StreamWriter вызвало проблему. Выполнение этого вместо этого приводит к окончательному ответу 200 OK.
using var stream = request.GetRequestStream(); await stream.WriteAsync(Encoding.UTF8.GetBytes(data));