Class: ClientRequest
Class: ClientRequest
HTTP/HTTPS 요청을 생성한다.
프로세스: 메인, 유틸리티
이 클래스는 'electron' 모듈에서 직접 내보내지 않는다. Electron API의 다른 메서드의 반환값으로만 사용할 수 있다.
ClientRequest는 Writable Stream 인터페이스를 구현하며, 따라서 EventEmitter이기도 하다.
new ClientRequest(options)
protocol, host, hostname, port, path와 같은 options 속성은 URL 모듈에 설명된 Node.js 모델을 엄격히 따른다.
예를 들어, 'github.com'에 대한 동일한 요청을 다음과 같이 생성할 수 있다:
const request = net.request({
method: 'GET',
protocol: 'https:',
hostname: 'github.com',
port: 443,
path: '/'
})
인스턴스 이벤트
이벤트: 'response'
반환값:
responseIncomingMessage - HTTP 응답 메시지를 나타내는 객체
이벤트: 'login'
반환값:
authInfo객체isProxybooleanschemestringhoststringportIntegerrealmstring
callback함수usernamestring (선택 사항)passwordstring (선택 사항)
인증을 요구하는 프록시가 사용자 자격 증명을 요청할 때 발생하는 이벤트다.
callback 함수는 사용자 자격 증명과 함께 호출될 것으로 예상된다:
usernamestringpasswordstring
request.on('login', (authInfo, callback) => {
callback('username', 'password')
})
빈 자격 증명을 제공하면 요청이 취소되고, 응답 객체에 인증 오류가 보고된다:
request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
response.on('error', (error) => {
console.log(`ERROR: ${JSON.stringify(error)}`)
})
})
request.on('login', (authInfo, callback) => {
callback()
})
이벤트: 'finish'
request 객체에 request의 마지막 데이터 청크가 기록된 직후에 발생한다.
이벤트: 'abort'
request가 중단될 때 발생한다. request가 이미 닫혀 있는 경우에는 abort 이벤트가 발생하지 않는다.
이벤트: 'error'
반환값:
errorError - 실패에 대한 정보를 제공하는 오류 객체
net 모듈이 네트워크 요청을 처리하지 못할 때 발생한다. 일반적으로 request 객체가 error 이벤트를 발생시키면, 이후 close 이벤트가 따라오며 응답 객체는 제공되지 않는다.
이벤트: 'close'
HTTP 요청-응답 트랜잭션의 마지막 이벤트로 발생한다. close 이벤트는 request 또는 response 객체에서 더 이상 이벤트가 발생하지 않음을 나타낸다.
이벤트: 'redirect'
반환값:
statusCodeIntegermethodstringredirectUrlstringresponseHeadersRecord<string, string[]>
서버가 리다이렉트 응답(예: 301 Moved Permanently)을 반환할 때 발생한다. request.followRedirect를 호출하면 리다이렉트를 계속 진행한다. 이 이벤트를 처리할 경우, request.followRedirect를 동기적으로 호출해야 한다. 그렇지 않으면 요청이 취소된다.
인스턴스 속성
request.chunkedEncoding
이 속성은 요청이 HTTP 청크 전송 인코딩을 사용할지 여부를 지정하는 boolean 값이다. 기본값은 false이다. 이 속성은 읽기와 쓰기가 모두 가능하지만, 첫 번째 쓰기 작업 전에만 설정할 수 있다. HTTP 헤더가 아직 전송되지 않았기 때문이다. 첫 번째 쓰기 작업 후에 chunkedEncoding 속성을 설정하려고 하면 오류가 발생한다.
큰 요청 본문을 보내야 할 경우, 데이터가 Electron 프로세스 메모리 내부에 버퍼링되는 대신 작은 청크로 스트리밍되기 때문에 청크 인코딩 사용을 강력히 권장한다.
인스턴스 메서드
request.setHeader(name, value)
namestring - 추가할 HTTP 헤더 이름valuestring - 추가할 HTTP 헤더 값
추가 HTTP 헤더를 설정한다. 헤더 이름은 그대로 사용하며 소문자로 변환하지 않는다. 이 메서드는 첫 번째 쓰기 작업 전에만 호출할 수 있다. 첫 번째 쓰기 작업 이후에 이 메서드를 호출하면 에러가 발생한다. 전달된 값이 string 타입이 아닌 경우, toString() 메서드를 호출해 최종 값을 얻는다.
일부 헤더는 앱에서 설정할 수 없다. 아래는 제한된 헤더 목록이다. 제한된 헤더에 대한 자세한 정보는 Chromium의 헤더 유틸리티에서 확인할 수 있다.
Content-LengthHostTrailer또는TeUpgradeCookie2Keep-AliveTransfer-Encoding
또한, Connection 헤더를 upgrade 값으로 설정하는 것도 허용되지 않는다.
request.getHeader(name)
namestring - 추가 헤더 이름을 지정한다.
반환값 string - 이전에 설정한 추가 헤더 이름의 값을 반환한다.
request.removeHeader(name)
namestring - 제거할 추가 헤더의 이름을 지정한다.
이전에 설정한 추가 헤더를 제거한다. 이 메서드는 첫 번째 쓰기 작업 전에만 호출할 수 있다. 첫 번째 쓰기 작업 이후에 호출하려고 하면 오류가 발생한다.
request.write(chunk[, encoding][, callback])
chunk(string | Buffer) - 요청 본문 데이터의 일부분. 문자열인 경우 지정된 인코딩을 사용해 Buffer로 변환한다.encodingstring (선택 사항) - 문자열 청크를 Buffer 객체로 변환할 때 사용. 기본값은 'utf-8'이다.callbackFunction (선택 사항) - 쓰기 작업이 끝난 후 호출되는 함수.
callback은 Node.js API와의 일관성을 유지하기 위해 도입된 더미 함수다. chunk 내용이 Chromium 네트워킹 레이어에 전달된 후 다음 틱에서 비동기적으로 호출된다. Node.js 구현과 달리, callback이 호출되기 전에 chunk 내용이 실제로 전송되었음을 보장하지 않는다.
이 메서드는 요청 본문에 데이터 청크를 추가한다. 첫 번째 쓰기 작업은 요청 헤더를 전송하게 할 수 있다. 첫 번째 쓰기 작업 이후에는 커스텀 헤더를 추가하거나 제거할 수 없다.
request.end([chunk][, encoding][, callback])
chunk(string | Buffer) (선택 사항)encodingstring (선택 사항)callbackFunction (선택 사항)
this를 반환한다.
요청 데이터의 마지막 청크를 전송한다. 이후의 write 또는 end 작업은 허용되지 않는다. finish 이벤트는 end 작업 직후에 발생한다.
request.abort()
진행 중인 HTTP 트랜잭션을 취소한다. 요청이 이미 close 이벤트를 발생시킨 경우, abort 작업은 아무런 영향을 미치지 않는다. 그렇지 않으면 진행 중인 이벤트에서 abort와 close 이벤트가 발생한다. 또한, 진행 중인 response 객체가 있다면 aborted 이벤트를 발생시킨다.
request.followRedirect()
보류 중인 리다이렉트를 계속 진행한다. 이 메서드는 'redirect' 이벤트가 발생하는 동안에만 호출할 수 있다.
request.getUploadProgress()
Object를 반환한다:
activeboolean - 현재 요청이 활성 상태인지 여부. 이 값이 false이면 다른 속성은 설정되지 않는다.startedboolean - 업로드가 시작되었는지 여부. 이 값이 false이면current와total은 모두 0으로 설정된다.currentInteger - 현재까지 업로드된 바이트 수totalInteger - 이 요청에서 업로드될 총 바이트 수
이 메서드를 POST 요청과 함께 사용하여 파일 업로드나 다른 데이터 전송의 진행 상황을 확인할 수 있다.