Skip to content

Commit b3cf00a

Browse files
committed
Fix net module to accept non-string header values
This is required to be compatible with node.js http module.
1 parent 57edc28 commit b3cf00a

3 files changed

Lines changed: 49 additions & 5 deletions

File tree

docs/api/client-request.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,18 @@ internally buffered inside Electron process memory.
158158
#### `request.setHeader(name, value)`
159159

160160
* `name` String - An extra HTTP header name.
161-
* `value` String - An extra HTTP header value.
161+
* `value` Object - An extra HTTP header value.
162162

163163
Adds an extra HTTP header. The header name will issued as it is without
164164
lowercasing. It can be called only before first write. Calling this method after
165-
the first write will throw an error.
165+
the first write will throw an error. If the passed value is not a `String`, its
166+
`toString()` method will be called to obtain the final value.
166167

167168
#### `request.getHeader(name)`
168169

169170
* `name` String - Specify an extra header name.
170171

171-
Returns String - The value of a previously set extra header name.
172+
Returns Object - The value of a previously set extra header name.
172173

173174
#### `request.removeHeader(name)`
174175

lib/browser/api/net.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ class ClientRequest extends EventEmitter {
246246
if (typeof name !== 'string') {
247247
throw new TypeError('`name` should be a string in setHeader(name, value).')
248248
}
249-
if (value === undefined) {
249+
if (value == null) {
250250
throw new Error('`value` required in setHeader("' + name + '", value).')
251251
}
252252
if (!this.urlRequest.notStarted) {
@@ -255,7 +255,7 @@ class ClientRequest extends EventEmitter {
255255

256256
const key = name.toLowerCase()
257257
this.extraHeaders[key] = value
258-
this.urlRequest.setExtraHeader(name, value)
258+
this.urlRequest.setExtraHeader(name, value.toString())
259259
}
260260

261261
getHeader (name) {

spec/api-net-spec.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,49 @@ describe('net module', function () {
364364
urlRequest.end()
365365
})
366366

367+
it('should be able to set a non-string object as a header value', function (done) {
368+
const requestUrl = '/requestUrl'
369+
const customHeaderName = 'Some-Integer-Value'
370+
const customHeaderValue = 900
371+
server.on('request', function (request, response) {
372+
switch (request.url) {
373+
case requestUrl:
374+
assert.equal(request.headers[customHeaderName.toLowerCase()],
375+
customHeaderValue.toString())
376+
response.statusCode = 200
377+
response.statusMessage = 'OK'
378+
response.end()
379+
break
380+
default:
381+
assert.equal(request.url, requestUrl)
382+
}
383+
})
384+
const urlRequest = net.request({
385+
method: 'GET',
386+
url: `${server.url}${requestUrl}`
387+
})
388+
urlRequest.on('response', function (response) {
389+
const statusCode = response.statusCode
390+
assert.equal(statusCode, 200)
391+
response.pause()
392+
response.on('end', function () {
393+
done()
394+
})
395+
response.resume()
396+
})
397+
urlRequest.setHeader(customHeaderName, customHeaderValue)
398+
assert.equal(urlRequest.getHeader(customHeaderName),
399+
customHeaderValue)
400+
assert.equal(urlRequest.getHeader(customHeaderName.toLowerCase()),
401+
customHeaderValue)
402+
urlRequest.write('')
403+
assert.equal(urlRequest.getHeader(customHeaderName),
404+
customHeaderValue)
405+
assert.equal(urlRequest.getHeader(customHeaderName.toLowerCase()),
406+
customHeaderValue)
407+
urlRequest.end()
408+
})
409+
367410
it('should not be able to set a custom HTTP request header after first write', function (done) {
368411
const requestUrl = '/requestUrl'
369412
const customHeaderName = 'Some-Custom-Header-Name'

0 commit comments

Comments
 (0)