Как прокси / потоковый HTTPS-запрос с помощью Express / got? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь проксировать аватары пользователей GitHub через мой сервер, используя Express и got .

Без rejectUnauthorized: false, возвращается следующий блок кода ошибка:

GotError: Имя хоста / IP не совпадает с альтернативными именами сертификата: Host: localhost. отсутствует в альтернативных именах сертификата: DNS: www.github.com, DNS: .github.com, DNS: github.com, DNS: .github.io, DNS: github.io, DNS: *. githubusercontent .com, DNS: githubusercontent.com

При rejectUnauthorized: false возвращается ошибка:

HTTPError: Код ответа 404 (не найден)

Что я делаю не так?

const server = express()
server.get("/api/github/:username", async (req, res) => {
  if (!req.params.username) {
    res.sendStatus(400)
  } else {
    try {
      const stream = got.stream(
        `https://avatars.githubusercontent.com/${req.params.username}?size=64`,
        {
          rejectUnauthorized: false,
        }
      )
      stream.on("error", error => {
        res.sendStatus(500)
      })
      req.pipe(stream).pipe(res)
    } catch (error) {
      res.sendStatus(400)
    }
  }
})

1 Ответ

0 голосов
/ 26 февраля 2020

Завершено использованием get против stream, и это работает.

При этом я считаю, что потоковая передача более эффективна, поэтому, пожалуйста, отправьте отзыв, если вы знаете, как добиться того же результата, используя stream .

server.get("/api/github/:username", async (req, res) => {
  if (!req.params.username) {
    res.sendStatus(400)
  } else {
    try {
      const response = await got(
        `https://avatars.githubusercontent.com/${req.params.username}`,
        { responseType: "buffer" }
      )
      res.set({
        "Content-Length": response.headers["content-length"],
        "Content-Type": response.headers["content-type"],
      })
      res.send(response.body)
    } catch (error) {
      res.sendStatus(500)
    }
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...