Ticket #10588: IXR-HTTP.diff
File IXR-HTTP.diff, 4.3 KB (added by , 16 years ago) |
---|
-
wp-includes/class-IXR.php
507 507 if (!$path) { 508 508 // Assume we have been given a URL instead 509 509 $bits = parse_url($server); 510 $this->scheme = $bits['scheme']; 510 511 $this->server = $bits['host']; 511 512 $this->port = isset($bits['port']) ? $bits['port'] : 80; 512 513 $this->path = isset($bits['path']) ? $bits['path'] : '/'; … … 515 516 $this->path = '/'; 516 517 } 517 518 } else { 519 $this->scheme = 'http'; 518 520 $this->server = $server; 519 521 $this->path = $path; 520 522 $this->port = $port; … … 526 528 $args = func_get_args(); 527 529 $method = array_shift($args); 528 530 $request = new IXR_Request($method, $args); 529 $length = $request->getLength();530 531 $xml = $request->getXml(); 531 $r = "\r\n";532 $request = "POST {$this->path} HTTP/1.0$r";533 532 534 $this->headers['Host'] = $this->server; 535 $this->headers['Content-Type'] = 'text/xml'; 536 $this->headers['User-Agent'] = $this->useragent; 537 $this->headers['Content-Length']= $length; 533 $url = $this->scheme . '://' . $this->server . ':' . $this->port . $this->path; 534 $args = array( 535 'headers' => array('Content-Type' => 'text/xml'), 536 'user-agent' => $this->useragent, 537 'body' => $xml, 538 ); 538 539 539 foreach( $this->headers as $header => $value ) { 540 $request .= "{$header}: {$value}{$r}"; 541 } 542 $request .= $r; 540 foreach ( $this->headers as $header => $value ) 541 $args['headers'][$header] = $value; 543 542 544 $request .= $xml; 543 if ( $this->timeout !== false ) 544 $args['timeout'] = $this->timeout; 545 545 546 // Now send the request 546 547 if ($this->debug) { 547 echo '<pre class="ixr_request">'.htmlspecialchars($ request)."\n</pre>\n\n";548 echo '<pre class="ixr_request">'.htmlspecialchars($xml)."\n</pre>\n\n"; 548 549 } 549 if ($this->timeout) { 550 $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout); 551 } else { 552 $fp = @fsockopen($this->server, $this->port, $errno, $errstr); 550 551 $response = wp_remote_post($url, $args); 552 553 if ( is_wp_error($response) ) { 554 $errno = $response->get_error_code(); 555 $errorstr = $response->get_error_message(); 556 $this->error = new IXR_Error(-32300, "transport error: $errno $errstr"); 557 return false; 553 558 } 554 if (!$fp) { 555 $this->error = new IXR_Error(-32300, "transport error - could not open socket: $errno $errstr"); 559 560 $code = $response['response']['code']; 561 if ( $code != 200 ) { 562 $this->error = new IXR_Error(-32301, "transport error - HTTP status code was not 200 ($code)"); 556 563 return false; 557 564 } 558 fputs($fp, $request);559 $contents = '';560 $debug_contents = '';561 $gotFirstLine = false;562 $gettingHeaders = true;563 while (!feof($fp)) {564 $line = fgets($fp, 4096);565 if (!$gotFirstLine) {566 // Check line for '200'567 if (strstr($line, '200') === false) {568 $this->error = new IXR_Error(-32301, 'transport error - HTTP status code was not 200');569 return false;570 }571 $gotFirstLine = true;572 }573 if (trim($line) == '') {574 $gettingHeaders = false;575 }576 if (!$gettingHeaders) {577 $contents .= trim($line);578 }579 if ($this->debug) {580 $debug_contents .= $line;581 }582 }583 565 if ($this->debug) { 566 $debug_contents = $response['body']; 584 567 echo '<pre class="ixr_response">'.htmlspecialchars($debug_contents)."\n</pre>\n\n"; 585 568 } 586 // Now parse what we've got back 587 $this->message = new IXR_Message($contents); 569 $this->message = new IXR_Message($response['body']); 588 570 if (!$this->message->parse()) { 589 571 // XML error 590 572 $this->error = new IXR_Error(-32700, 'parse error. not well formed');