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'
반환값:
response
IncomingMessage - HTTP 응답 메시지를 나타내는 객체
이벤트: 'login'
반환값:
authInfo
객체isProxy
booleanscheme
stringhost
stringport
Integerrealm
string
callback
함수username
string (선택 사항)password
string (선택 사항)
인증을 요구하는 프록시가 사용자 자격 증명을 요청할 때 발생하는 이벤트다.
callback
함수는 사용자 자격 증명과 함께 호출될 것으로 예상된다:
username
stringpassword
string
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'
반환값:
error
Error - 실패에 대한 정보를 제공하는 오류 객체
net
모듈이 네트워크 요청을 처리하지 못할 때 발생한다. 일반적으로 request
객체가 error
이벤트를 발생시키면, 이후 close
이벤트가 따라오며 응답 객체는 제공되지 않는다.
이벤트: 'close'
HTTP 요청-응답 트랜잭션의 마지막 이벤트로 발생한다. close
이벤트는 request
또는 response
객체에서 더 이상 이벤트가 발생하지 않음을 나타낸다.
이벤트: 'redirect'
반환값:
statusCode
Integermethod
stringredirectUrl
stringresponseHeaders
Record<string, string[]>
서버가 리다이렉트 응답(예: 301 Moved Permanently)을 반환할 때 발생한다. request.followRedirect
를 호출하면 리다이렉트를 계속 진행한다. 이 이벤트를 처리할 경우, request.followRedirect
를 동기적으로 호출해야 한다. 그렇지 않으면 요청이 취소된다.
인스턴스 속성
request.chunkedEncoding
이 속성은 요청이 HTTP 청크 전송 인코딩을 사용할지 여부를 지정하는 boolean
값이다. 기본값은 false
이다. 이 속성은 읽기와 쓰기가 모두 가능하지만, 첫 번째 쓰기 작업 전에만 설정할 수 있다. HTTP 헤더가 아직 전송되지 않았기 때문이다. 첫 번째 쓰기 작업 후에 chunkedEncoding
속성을 설정하려고 하면 오류가 발생한다.
큰 요청 본문을 보내야 할 경우, 데이터가 Electron 프로세스 메모리 내부에 버퍼링되는 대신 작은 청크로 스트리밍되기 때문에 청크 인코딩 사용을 강력히 권장한다.
인스턴스 메서드
request.setHeader(name, value)
name
string - 추가할 HTTP 헤더 이름value
string - 추가할 HTTP 헤더 값
추가 HTTP 헤더를 설정한다. 헤더 이름은 그대로 사용하며 소문자로 변환하지 않는다. 이 메서드는 첫 번째 쓰기 작업 전에만 호출할 수 있다. 첫 번째 쓰기 작업 이후에 이 메서드를 호출하면 에러가 발생한다. 전달된 값이 string
타입이 아닌 경우, toString()
메서드를 호출해 최종 값을 얻는다.
일부 헤더는 앱에서 설정할 수 없다. 아래는 제한된 헤더 목록이다. 제한된 헤더에 대한 자세한 정보는 Chromium의 헤더 유틸리티에서 확인할 수 있다.
Content-Length
Host
Trailer
또는Te
Upgrade
Cookie2
Keep-Alive
Transfer-Encoding
또한, Connection
헤더를 upgrade
값으로 설정하는 것도 허용되지 않는다.
request.getHeader(name)
name
string - 추가 헤더 이름을 지정한다.
반환값 string
- 이전에 설정한 추가 헤더 이름의 값을 반환한다.
request.removeHeader(name)
name
string - 제거할 추가 헤더의 이름을 지정한다.
이전에 설정한 추가 헤더를 제거한다. 이 메서드는 첫 번째 쓰기 작업 전에만 호출할 수 있다. 첫 번째 쓰기 작업 이후에 호출하려고 하면 오류가 발생한다.
request.write(chunk[, encoding][, callback])
chunk
(string | Buffer) - 요청 본문 데이터의 일부분. 문자열인 경우 지정된 인코딩을 사용해 Buffer로 변환한다.encoding
string (선택 사항) - 문자열 청크를 Buffer 객체로 변환할 때 사용. 기본값은 'utf-8'이다.callback
Function (선택 사항) - 쓰기 작업이 끝난 후 호출되는 함수.
callback
은 Node.js API와의 일관성을 유지하기 위해 도입된 더미 함수다. chunk
내용이 Chromium 네트워킹 레이어에 전달된 후 다음 틱에서 비동기적으로 호출된다. Node.js 구현과 달리, callback
이 호출되기 전에 chunk
내용이 실제로 전송되었음을 보장하지 않는다.
이 메서드는 요청 본문에 데이터 청크를 추가한다. 첫 번째 쓰기 작업은 요청 헤더를 전송하게 할 수 있다. 첫 번째 쓰기 작업 이후에는 커스텀 헤더를 추가하거나 제거할 수 없다.
request.end([chunk][, encoding][, callback])
chunk
(string | Buffer) (선택 사항)encoding
string (선택 사항)callback
Function (선택 사항)
this
를 반환한다.
요청 데이터의 마지막 청크를 전송한다. 이후의 write
또는 end
작업은 허용되지 않는다. finish
이벤트는 end
작업 직후에 발생한다.
request.abort()
진행 중인 HTTP 트랜잭션을 취소한다. 요청이 이미 close
이벤트를 발생시킨 경우, abort 작업은 아무런 영향을 미치지 않는다. 그렇지 않으면 진행 중인 이벤트에서 abort
와 close
이벤트가 발생한다. 또한, 진행 중인 response 객체가 있다면 aborted
이벤트를 발생시킨다.
request.followRedirect()
보류 중인 리다이렉트를 계속 진행한다. 이 메서드는 'redirect'
이벤트가 발생하는 동안에만 호출할 수 있다.
request.getUploadProgress()
Object
를 반환한다:
active
boolean - 현재 요청이 활성 상태인지 여부. 이 값이 false이면 다른 속성은 설정되지 않는다.started
boolean - 업로드가 시작되었는지 여부. 이 값이 false이면current
와total
은 모두 0으로 설정된다.current
Integer - 현재까지 업로드된 바이트 수total
Integer - 이 요청에서 업로드될 총 바이트 수
이 메서드를 POST
요청과 함께 사용하여 파일 업로드나 다른 데이터 전송의 진행 상황을 확인할 수 있다.