@@ -520,6 +520,7 @@ function requestWithCallback(url, args, callback) {
520
520
}
521
521
return ;
522
522
}
523
+
523
524
var cb = callback ;
524
525
callback = null ;
525
526
var headers = { } ;
@@ -529,49 +530,16 @@ function requestWithCallback(url, args, callback) {
529
530
headers = res . headers ;
530
531
}
531
532
532
- // handle digest auth
533
- if ( statusCode === 401 && headers [ 'www-authenticate' ]
534
- && ! options . headers . authorization && args . digestAuth ) {
535
- var authenticate = headers [ 'www-authenticate' ] ;
536
- if ( authenticate . indexOf ( 'Digest ' ) >= 0 ) {
537
- debug ( 'Request#%d %s: got digest auth header WWW-Authenticate: %s' , reqId , url , authenticate ) ;
538
- options . headers . authorization = digestAuthHeader ( options . method , options . path , authenticate , args . digestAuth ) ;
539
- debug ( 'Request#%d %s: auth with digest header: %s' , reqId , url , options . headers . authorization ) ;
540
- if ( res . headers [ 'set-cookie' ] ) {
541
- options . headers . cookie = res . headers [ 'set-cookie' ] . join ( ';' ) ;
542
- }
543
- args . headers = options . headers ;
544
- return exports . requestWithCallback ( url , args , cb ) ;
545
- }
533
+ if ( handleDigestAuth ( res , cb ) ) {
534
+ return ;
546
535
}
547
536
548
- var requestUseTime = Date . now ( ) - requestStartTime ;
549
- if ( timing ) {
550
- timing . contentDownload = requestUseTime ;
551
- }
537
+ var response = createCallbackResponse ( data , res ) ;
552
538
553
539
debug ( '[%sms] done, %s bytes HTTP %s %s %s %s, keepAliveSocket: %s, timing: %j, socketHandledRequests: %s, socketHandledResponses: %s' ,
554
- requestUseTime , responseSize , statusCode , options . method , options . host , options . path ,
540
+ response . requestUseTime , responseSize , statusCode , options . method , options . host , options . path ,
555
541
keepAliveSocket , timing , socketHandledRequests , socketHandledResponses ) ;
556
542
557
- var response = {
558
- status : statusCode ,
559
- statusCode : statusCode ,
560
- statusMessage : statusMessage ,
561
- headers : headers ,
562
- size : responseSize ,
563
- aborted : responseAborted ,
564
- rt : requestUseTime ,
565
- keepAliveSocket : keepAliveSocket ,
566
- data : data ,
567
- requestUrls : args . requestUrls ,
568
- timing : timing ,
569
- remoteAddress : remoteAddress ,
570
- remotePort : remotePort ,
571
- socketHandledRequests : socketHandledRequests ,
572
- socketHandledResponses : socketHandledResponses ,
573
- } ;
574
-
575
543
if ( err ) {
576
544
var agentStatus = '' ;
577
545
if ( agent && typeof agent . getCurrentStatus === 'function' ) {
@@ -620,6 +588,45 @@ function requestWithCallback(url, args, callback) {
620
588
621
589
cb ( err , data , args . streaming ? res : response ) ;
622
590
591
+ emitResponseEvent ( err , response ) ;
592
+ }
593
+
594
+ function createAndEmitResponseEvent ( data , res ) {
595
+ var response = createCallbackResponse ( data , res ) ;
596
+ emitResponseEvent ( null , response ) ;
597
+ }
598
+
599
+ function createCallbackResponse ( data , res ) {
600
+ var requestUseTime = Date . now ( ) - requestStartTime ;
601
+ if ( timing ) {
602
+ timing . contentDownload = requestUseTime ;
603
+ }
604
+
605
+ var headers = { } ;
606
+ if ( res && res . headers ) {
607
+ headers = res . headers ;
608
+ }
609
+
610
+ return {
611
+ status : statusCode ,
612
+ statusCode : statusCode ,
613
+ statusMessage : statusMessage ,
614
+ headers : headers ,
615
+ size : responseSize ,
616
+ aborted : responseAborted ,
617
+ rt : requestUseTime ,
618
+ keepAliveSocket : keepAliveSocket ,
619
+ data : data ,
620
+ requestUrls : args . requestUrls ,
621
+ timing : timing ,
622
+ remoteAddress : remoteAddress ,
623
+ remotePort : remotePort ,
624
+ socketHandledRequests : socketHandledRequests ,
625
+ socketHandledResponses : socketHandledResponses ,
626
+ } ;
627
+ }
628
+
629
+ function emitResponseEvent ( err , response ) {
623
630
if ( args . emitter ) {
624
631
// keep to use the same reqMeta object on request event before
625
632
reqMeta . url = parsedUrl . href ;
@@ -637,6 +644,30 @@ function requestWithCallback(url, args, callback) {
637
644
}
638
645
}
639
646
647
+ function handleDigestAuth ( res , cb ) {
648
+ var headers = { } ;
649
+ if ( res && res . headers ) {
650
+ headers = res . headers ;
651
+ }
652
+ // handle digest auth
653
+ if ( statusCode === 401 && headers [ 'www-authenticate' ]
654
+ && ! options . headers . authorization && args . digestAuth ) {
655
+ var authenticate = headers [ 'www-authenticate' ] ;
656
+ if ( authenticate . indexOf ( 'Digest ' ) >= 0 ) {
657
+ debug ( 'Request#%d %s: got digest auth header WWW-Authenticate: %s' , reqId , url , authenticate ) ;
658
+ options . headers . authorization = digestAuthHeader ( options . method , options . path , authenticate , args . digestAuth ) ;
659
+ debug ( 'Request#%d %s: auth with digest header: %s' , reqId , url , options . headers . authorization ) ;
660
+ if ( res . headers [ 'set-cookie' ] ) {
661
+ options . headers . cookie = res . headers [ 'set-cookie' ] . join ( ';' ) ;
662
+ }
663
+ args . headers = options . headers ;
664
+ exports . requestWithCallback ( url , args , cb ) ;
665
+ return true ;
666
+ }
667
+ }
668
+ return false ;
669
+ }
670
+
640
671
function handleRedirect ( res ) {
641
672
var err = null ;
642
673
if ( args . followRedirect && statuses . redirect [ res . statusCode ] ) { // handle redirect
@@ -740,6 +771,7 @@ function requestWithCallback(url, args, callback) {
740
771
var result = handleRedirect ( res ) ;
741
772
if ( result . redirect ) {
742
773
res . resume ( ) ;
774
+ createAndEmitResponseEvent ( null , res ) ;
743
775
return ;
744
776
}
745
777
if ( result . error ) {
@@ -781,6 +813,7 @@ function requestWithCallback(url, args, callback) {
781
813
var result = handleRedirect ( res ) ;
782
814
if ( result . redirect ) {
783
815
res . resume ( ) ;
816
+ createAndEmitResponseEvent ( null , res ) ;
784
817
return ;
785
818
}
786
819
if ( result . error ) {
@@ -874,6 +907,7 @@ function requestWithCallback(url, args, callback) {
874
907
return done ( result . error , body , res ) ;
875
908
}
876
909
if ( result . redirect ) {
910
+ createAndEmitResponseEvent ( null , res ) ;
877
911
return ;
878
912
}
879
913
0 commit comments