Через несколько дней go я обнаружил, что размещение данных с помощью «Content-Type»: «application / x- www-form-urlencoded» не позволит мне отправлять такие символы, как ñ, ç, á, é, í, ó, ú и другие не-ASCII, используемые в некоторых языках. Он вернул [ERR_INVALID_CHAR].
Немного погуглив, я обнаружил, что для публикации больших объемов данных и символов, не входящих в ASCII, мне следует использовать «Content-Type»: «multipart / form-data "(форма, в основном).
Итак, поскольку информация, которую я публикую, не собирается в форме шаблона, мне пришлось создать объект данных формы непосредственно в функции на моем node.js сервере. применение. Вот мой node.js код:
const formData = require('form-data');
const https = require('https');
const form = new formData();
form.append('name', 'ñámeç');
let options = {
hostname: 'dev.mydomain.com',
path: '/processdata',
method: 'POST',
headers: form.getHeaders()
}
let req = https.request(options, res=>{
console.log(res.statusCode);
res.on('data', function(chunk){
console.log(''+chunk);
});
res.on('end', function(){
console.log('end');
});
});
req.on('error',function(e){
console.log(e);
})
form.pipe(req);
Затем в Symfony5 встроен API в dev.mydomain.com/processdata. До моего изменения с «Content-Type»: «application / x- www-form-urlencoded» на «Content-Type»: «multipart / form-data», код был:
public function processdata(Request $request)
{
// Get post data
$json = $request->get('json', null);
// Json decode data
$guest = json_decode($json);
... DO SOME STUFF ...
$data = "RESULTING STRING";
return new JsonResponse($data);
}
У меня есть изменил его на:
public function processData(Request $request)
{
// This is how I expected it would be:
var_dump($request->request->get('name'));
// This is just in case it was arriving as GET instead of POST (yes, I'm desperate):
var_dump($request->query->get('name'));
// This is just in case it was arriving as a form object.
var_dump($request->query->get('form')['name']);
// This is also a desperate test, but I found some forums pointing this out:
var_dump($request->get('name'));
// Trying to print the request contents:
print_r($request->request);
// Since all the $request calls in the var_dumps returned NULL or EMPTY data, I forced the enpoint to return a string to make sure I had a response.
// Forcing a string for the callback:
$data = "FORCED RESULTING STRING";
return new JsonResponse($data);
}
Затем я запускаю мое приложение node.js и выводим:
Claire:Test claire$ node test.js
200
NULL
NULL
NULL
NULL
Symfony\Component\HttpFoundation\ParameterBag Object
(
[parameters:protected] => Array
(
)
)
"FORCED RESULTING STRING"
end
Может кто-нибудь, пожалуйста, спасет меня? Я застрял здесь на пару дней. Все, что я мог прочитать также здесь, в stackoverflow, не относится к моему случаю, или я просто не осознаю разницу.
Если я пропускаю какие-либо данные, вам может понадобиться, чтобы я разъяснил, пожалуйста, дайте мне знать .
Большое спасибо заранее, и я надеюсь, что вы все в безопасности и здоровы.