90 if ( is_array( $this->postData ) ) {
94 if ( $this->parsedUrl[
'scheme'] !=
'http'
95 && $this->parsedUrl[
'scheme'] !=
'https' ) {
96 $this->status->fatal(
'http-invalid-scheme', $this->parsedUrl[
'scheme'] );
99 $this->reqHeaders[
'Accept'] =
"*/*";
100 $this->reqHeaders[
'Connection'] =
'Close';
101 if ( $this->method ==
'POST' ) {
103 $this->reqHeaders[
'Content-Length'] = strlen( $this->postData );
104 if ( !isset( $this->reqHeaders[
'Content-Type'] ) ) {
105 $this->reqHeaders[
'Content-Type'] =
"application/x-www-form-urlencoded";
112 'method' => $this->method,
114 'protocol_version' =>
'1.1',
115 'max_redirects' => $this->followRedirects ? $this->maxRedirects : 0,
116 'ignore_errors' =>
true,
117 'timeout' => $this->timeout,
119 'curl_verify_ssl_host' => $this->sslVerifyHost ? 2 : 0,
120 'curl_verify_ssl_peer' => $this->sslVerifyCert,
123 'verify_peer' => $this->sslVerifyCert,
124 'SNI_enabled' =>
true,
125 'ciphers' =>
'HIGH:!SSLv2:!SSLv3:-ADH:-kDH:-kECDH:-DSS',
126 'disable_compression' =>
true,
130 if ( $this->proxy ) {
132 $options[
'http'][
'request_fulluri'] =
true;
135 if ( $this->postData ) {
136 $options[
'http'][
'content'] = $this->postData;
139 if ( $this->sslVerifyHost ) {
140 $options[
'ssl'][
'peer_name'] = $this->parsedUrl[
'host'];
147 $this->headerList = [];
153 if ( $this->profiler ) {
154 $profileSection = $this->profiler->scopedProfileIn(
155 __METHOD__ .
'-' . $this->profileName
160 $this->fopenErrors = [];
161 set_error_handler( [ $this,
'errorHandler' ] );
163 restore_error_handler();
169 $result = stream_get_meta_data( $fh );
170 $this->headerList = $result[
'wrapper_data'];
173 if ( !$this->followRedirects ) {
177 # Handle manual redirection
178 if ( !$this->
isRedirect() || $reqCount > $this->maxRedirects ) {
181 # Check security of URL
185 $this->logger->debug( __METHOD__ .
": insecure redirection\n" );
189 if ( $this->profiler ) {
190 $this->profiler->scopedProfileOut( $profileSection );
195 if ( $fh ===
false ) {
196 if ( $this->fopenErrors ) {
197 $this->logger->warning( __CLASS__
198 .
': error opening connection: {errstr1}', $this->fopenErrors );
200 $this->status->fatal(
'http-request-error' );
201 return Status::wrap( $this->status );
204 if ( $result[
'timed_out'] ) {
205 $this->status->fatal(
'http-timed-out', $this->url );
206 return Status::wrap( $this->status );
211 if ( $this->status->isOK() || (
int)$this->respStatus >= 300 ) {
212 while ( !feof( $fh ) ) {
213 $buf = fread( $fh, 8192 );
215 if ( $buf ===
false ) {
216 $this->status->fatal(
'http-read-error' );
220 if ( strlen( $buf ) ) {
221 call_user_func( $this->callback, $fh, $buf );
227 return Status::wrap( $this->status );