Я пытаюсь изменить свой SSID Wi-Fi на эмодзи, но веб-интерфейс этого не позволяет. Вместо этого я фиксирую действительный запрос PUT в API маршрутизатора, копирую его как fetch
вызов, используя инструменты разработчика Chrome, меняю SSID на смайлик и повторяю запрос. Отлично работает.
Однако, когда я пытаюсь сделать это с помощью Python Requests, он экранирует эмодзи (?
) в соответствующие экранированные символы JavaScript: \uD83E\uDD20
. Когда это отправляется на маршрутизатор, оно каким-то образом переводится в >
(знак «больше», за которым следует пробел). Это расстраивает, потому что я предполагаю, что оба метода будут кодировать эмодзи одинаково.
Так как он работает с JavaScript fetch
, должно быть некоторое различие в кодировании сообщения или смайлика.
Fetch Call: (эмодзи просто отображается как эмодзи, даже при проверке запроса с помощью Dev Tools) (отредактировано для краткости)
fetch("https://192.168.1.1/api/wireless", {
"credentials": "omit",
"headers": {
"accept": "application/json, text/plain, */*",
"content-type": "application/json;charset=UTF-8",
"x-xsrf-token": "[The token for this login session]"
},
"referrer": "https://192.168.1.1/",
"referrerPolicy": "no-referrer-when-downgrade",
"body": "{
\"wifi\": [{
\"boring key 1\": \"boring value\",
\"boring key 2\": \"boring value\",
\"ssid\": \"?\",
\"boring key 3\": \"boring value\",
\"boring key 4\": \"boring value\"
}]
}",
"method": "PUT",
"mode": "cors"
});
Запрос вызова: (отредактировано для краткости)
res = session.put('https://192.168.1.1/api/wireless',
verify=False,
json={
"wifi":[{
"boring key 1":"boring value",
"boring key 2":"boring value",
"ssid":"?",
"boring key 3":
"boring value",
"boring key 4":"boring value"
}]
})
Так в чем же разница в том, как они кодируются? И как я могу увидеть, что фактический вывод выборки? (Dev Tools просто показывает эмодзи, без escape-последовательностей.)