Я не могу выполнить почтовый запрос с помощью XMLHttpRequest (код будет запущен на стороне клиента). Вот мой код: (В основном я хочу проверить вывод любого кода Python, отправив почтовый запрос в онлайн-службу, которая выполняет эту работу за меня)
var code = "print('hey')"
var input = "";
var data = new FormData();
var params = {'LanguageChoiceWrapper': "24",
'EditorChoiceWrapper':'1',
'LayoutChoiceWrapper':'1',
'Program': code,
'Input': input,
'Privacy': '',
'PrivacyUsers': '',
'Title': '',
'SavedOutput':'',
'WholeError':'',
'WholeWarning': '',
'StatsToSave': '',
'CodeGuid': '',
'IsInEditMode': 'False',
'IsLive': 'False'
}
for (name in params) {
data.append(name, params[name]);
}
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://rextester.com/rundotnet/Run', true);
xhr.onload = function () {
// do something to response
console.info(this.responseText);
};
xhr.send(data);
При его запуске возникает эта ошибка
При отправке той же информации через почтальона он работает нормально и возвращает все, что я хочу ... Я столкнулся с несколькими потоками, но не смог заставить его работать, просто заменив поля 'url' и 'params' в их ответах . Вот две темы, которые я прочитал: 12
Консоль сообщает о тайм-ауте соединения и от попытки получить доступ к сайту самостоятельно: похоже, это так, если только веб-сайт не доступен через Интернет.
Привет, мой ответ работает?
@Jorge Fuentes Gonzáles + -: / Когда я запускаю js-код на моем компьютере, он делает запрос, если вы проверяете вкладку «сеть», но он не возвращает никакого значения: /
Прочтите мой последний абзац. Это проблема, с которой вы столкнулись. Вы не можете сделать запрос с другим доменом, если целевой домен не позволяет вашему домену делать это. Это мера безопасности, которую невозможно преодолеть в браузерах по умолчанию. Найдите в Google информацию о CORS
.
Привет, мой ответ что-то прояснил для этой проблемы?
Вы подключаетесь к хосту с протоколом HTTPS, который по умолчанию подключается к порту 443.
Как сказано в сообщении об ошибке, время ожидания соединения истекло. Это означает, что сервер не принимает подключения к этому порту.
Я попытался установить telnet для домена rextester.com с портом 443 и вернул ошибку подключения (такую же, как и в браузере), поэтому на сервере не открыт порт 443, который используется по умолчанию для запросов HTTPS:
Попробуйте сделать HTTP-запрос с этим URL-адресом:
http://rextester.com/rundotnet/Run
HTTP имеет порт по умолчанию 80, который фактически открыт сервером:
Обратите внимание, что это попытается сделать запрос к этому домену, но если целевой домен не разрешает запросы из разных источников, он не будет работать, если запрос сделан из другого домена. И это не исправить, так как невозможно обойтись без мер безопасности (если под «клиентом» вы говорите о браузере).
Заголовки контроля доступа не устанавливаются на стороне клиента. Они должны быть установлены удаленным сервером. Если их там нет и запрос направлен к другому источнику, вам нужно будет использовать прокси на сервере, который вы контролируете, или стороннюю службу.