Я устанавливаю связь между моим сервером Apollo (Node) и REST API.Моя конечная точка https://app.myproject.local/api/v1
и обслуживается через отель через Pacfile, доступный с http://localhost:2000/proxy.pac
.
В действительности эта конечная точка также доступна с http://localhost:4000/api/v1
, но я хочу получить к ней доступ через Hotel.
Я решил, что app.myproject.local
не будет решено, если я попытаюсь получить к нему доступ непосредственно в приложении узла, поэтому мне нужно пройти через HttpsProxyAgent
и получить его оттуда.
import { RESTDataSource } from 'apollo-datasource-rest'
import HttpsProxyAgent from 'https-proxy-agent'
import { restConfig } from '../config/restConfig'
export class RestAPI extends RESTDataSource {
constructor() {
super()
this.baseURL = restConfig.endpoint
}
public willSendRequest(request: any) {
request.agent = new HttpsProxyAgent({
host: 'localhost',
port: 2000,
secureProxy: false,
rejectUnauthorized: false,
})
}
public async test() {
return this.get('/status')
}
}
Несмотря на наличие rejectUnauthorized
выдает ошибку
(node:40593) UnhandledPromiseRejectionWarning: FetchError: request to https://app.myproject.local/api/v1/organizations/current failed, reason: write EPROTO 4474312128:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
Когда я пытаюсь сделать такой же выборки с помощью cURL, это работает с
curl --insecure --proxy http://localhost:2000/proxy.pac https://app.myproject.local/api/v1/status
Это может быть недоразумением с моей стороны, но я подумалrejectUnauthorized
позволит обойти проблему с сертификатом SSL.Я на самом деле использую это в среде разработки, так что это не имеет большого значения, в производстве мне не нужно проходить через все это.
Я использую документацию https://node.readthedocs.io/en/latest/api/tls/#tlsconnectport-host-options-callback дляпомогите мне передать аргументы HttpsProxyAgent