Я использую модуль https, присутствующий в NodeJS, для отправки необработанного HTTP-запроса после операции подключения.
Используя пример, приведенный в документации по NodeJS, я извлек запрос RAW из fiddler и отправляю его, однако Google отправляет обратно Your client has issued a malformed or illegal request.
Запрос должен работать так, как он взят прямо из рабочего запроса на Fiddler, и использование модуля запроса с соответствующими заголовками определенно работает.
const options = {
hostname: "google.com",
port: 443,
method: "CONNECT"
};
const req = https.request(options);
req.end();
req.on("connect", (res, socket, head) => {
console.log("Socket connected");
socket.write(
"GET https://www.google.com/ HTTP/1.1\r\n" +
"Host: www.google.com\r\n" +
"Connection: keep-alive\r\n" +
"Upgrade-Insecure-Requests: 1\r\n" +
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36\r\n" +
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n" +
"Accept-Encoding: gzip, deflate, br\r\n" +
"Accept-Language: en-US,en;q=0.9\r\n"
);
socket.on("data", chunk => {
console.log(chunk.toString());
});
socket.on("end", () => {
console.log("Socket was closed");
});
});
Я ожидаю, что браузер получит нормальный ответ, однако я получаю следующее от Google.
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>400.</b> <ins>That’s an error.</ins>
<p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins>