@@ -10,12 +10,13 @@ const { inherits } = require('util')
1010const http = require ( 'http' )
1111const { intercept : debug } = require ( './debug' )
1212const globalEmitter = require ( './global_emitter' )
13- const { BatchInterceptor } = require ( '@mswjs/interceptors' )
13+ const { BatchInterceptor, getRawRequest } = require ( '@mswjs/interceptors' )
1414const {
1515 default : nodeInterceptors ,
1616} = require ( '@mswjs/interceptors/presets/node' )
1717const { createResponse } = require ( './create_response' )
1818const { once } = require ( 'events' )
19+ const { arrayBuffer } = require ( 'stream/consumers' )
1920
2021const interceptor = new BatchInterceptor ( {
2122 name : 'nock-interceptor' ,
@@ -409,7 +410,17 @@ function activate() {
409410 once ( nockRequest , 'error' ) ,
410411 once ( nockRequest , 'response' ) ,
411412 ] )
412- const buffer = await request . arrayBuffer ( )
413+
414+ const rawRequest = getRawRequest ( mswRequest )
415+
416+ // If this is GET request with body, we need to read the body from the socket because Fetch API doesn't support this.
417+ const buffer =
418+ rawRequest instanceof originalClientRequest &&
419+ rawRequest . method === 'GET' &&
420+ rawRequest . getHeader ( 'content-length' ) > 0
421+ ? // TODO: use getClientRequestBodyStream instead of access to internal properties
422+ await arrayBuffer ( rawRequest . socket . requestStream )
423+ : await request . arrayBuffer ( )
413424 nockRequest . write ( buffer )
414425 nockRequest . end ( )
415426 await promise
0 commit comments