@@ -65,29 +65,32 @@ public function __toString()
65
65
return $ this ->body ;
66
66
}
67
67
68
- public static function parse ($ str )
68
+ public static function parse ($ responseStr , $ headerSize )
69
69
{
70
- $ headers = [] ;
71
- list ( $ header , $ body) = explode ( "\r\n\r\n" , $ str , 2 );
72
- $ data = explode ("\n" , $ header );
73
- array_shift ($ data );//Remove status
70
+ $ header = substr ( $ responseStr , 0 , $ headerSize ) ;
71
+ $ body = substr ( $ responseStr , $ headerSize );
72
+ $ lines = explode ("\n" , $ header );
73
+ array_shift ($ lines );//Remove status
74
74
75
- foreach ($ data as $ part ) {
75
+ $ headers = [];
76
+ foreach ($ lines as $ part ) {
76
77
$ middle = explode (': ' , $ part );
77
- $ headers [trim ($ middle [0 ])] = trim ($ middle [1 ]);
78
+ $ key = trim ($ middle [0 ]);
79
+ if ($ key === '' ) {
80
+ continue ;
81
+ }
82
+ $ headers [$ key ] = isset ($ middle [1 ]) ? trim ($ middle [1 ]) : '' ;
78
83
}
79
84
return [$ headers , $ body ];
80
85
}
81
86
82
- public static function make ($ url , $ code , $ responseStr , $ errno , $ errstr )
87
+ public static function make ($ url , $ code , $ responseStr , $ headerSize , array $ error )
83
88
{
84
- $ error = [];
85
- if ($ errno || $ errstr ) {
89
+ if (!empty ($ error [0 ]) || !empty ($ error [1 ])) {
86
90
$ headers = [];
87
91
$ body = '' ;
88
- $ error = [$ errno , $ errstr ];
89
92
} else {
90
- list ($ headers , $ body ) = static ::parse ($ responseStr );
93
+ list ($ headers , $ body ) = static ::parse ($ responseStr, $ headerSize );
91
94
}
92
95
return new static ($ url , $ code , $ body , $ headers , $ error );
93
96
}
0 commit comments