本文整理汇总了PHP中WP_Http::processHeaders方法的典型用法代码示例。如果您正苦于以下问题:PHP WP_Http::processHeaders方法的具体用法?PHP WP_Http::processHeaders怎么用?PHP WP_Http::processHeaders使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WP_Http
的用法示例。
在下文中一共展示了WP_Http::processHeaders方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: pre_http_request
/**
* Pre HTTP request
*
* @see https://github.com/WordPress/WordPress/blob/3.9.1/wp-includes/class-http.php#L150-L164
* @return string
*/
public function pre_http_request($preempt, $request, $url)
{
$response = file_get_contents(dirname(__FILE__) . '/Mock/GetIssuersXml200.http');
$processedResponse = WP_Http::processResponse($response);
$processedHeaders = WP_Http::processHeaders($processedResponse['headers'], $url);
$processedHeaders['body'] = $processedResponse['body'];
return $processedHeaders;
}
示例2: request
//.........这里部分代码省略.........
}
if (function_exists('wp_kses_bad_protocol')) {
if ($r['reject_unsafe_urls']) {
$url = wp_http_validate_url($url);
}
if ($url) {
$url = wp_kses_bad_protocol($url, array('http', 'https', 'ssl'));
}
}
$arrURL = @parse_url($url);
if (empty($url) || empty($arrURL['scheme'])) {
return new WP_Error('http_request_failed', __('A valid URL was not provided.'));
}
if ($this->block_request($url)) {
return new WP_Error('http_request_failed', __('User has blocked requests through HTTP.'));
}
// If we are streaming to a file but no filename was given drop it in the WP temp dir
// and pick its name using the basename of the $url
if ($r['stream']) {
if (empty($r['filename'])) {
$r['filename'] = get_temp_dir() . basename($url);
}
// Force some settings if we are streaming to a file and check for existence and perms of destination directory
$r['blocking'] = true;
if (!wp_is_writable(dirname($r['filename']))) {
return new WP_Error('http_request_failed', __('Destination directory for file streaming does not exist or is not writable.'));
}
}
if (is_null($r['headers'])) {
$r['headers'] = array();
}
// WP allows passing in headers as a string, weirdly.
if (!is_array($r['headers'])) {
$processedHeaders = WP_Http::processHeaders($r['headers']);
$r['headers'] = $processedHeaders['headers'];
}
// Setup arguments
$headers = $r['headers'];
$data = $r['body'];
$type = $r['method'];
$options = array('timeout' => $r['timeout'], 'useragent' => $r['user-agent'], 'blocking' => $r['blocking'], 'hooks' => new WP_HTTP_Requests_Hooks($url, $r));
// Ensure redirects follow browser behaviour.
$options['hooks']->register('requests.before_redirect', array(get_class(), 'browser_redirect_compatibility'));
if ($r['stream']) {
$options['filename'] = $r['filename'];
}
if (empty($r['redirection'])) {
$options['follow_redirects'] = false;
} else {
$options['redirects'] = $r['redirection'];
}
// Use byte limit, if we can
if (isset($r['limit_response_size'])) {
$options['max_bytes'] = $r['limit_response_size'];
}
// If we've got cookies, use and convert them to Requests_Cookie.
if (!empty($r['cookies'])) {
$options['cookies'] = WP_Http::normalize_cookies($r['cookies']);
}
// SSL certificate handling
if (!$r['sslverify']) {
$options['verify'] = false;
$options['verifyname'] = false;
} else {
$options['verify'] = $r['sslcertificates'];
}
示例3: request
//.........这里部分代码省略.........
// If streaming to a file open a file handle, and setup our curl streaming handler.
if ($r['stream']) {
if (!WP_DEBUG) {
$this->stream_handle = @fopen($r['filename'], 'w+');
} else {
$this->stream_handle = fopen($r['filename'], 'w+');
}
if (!$this->stream_handle) {
return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $r['filename']));
}
} else {
$this->stream_handle = false;
}
if (!empty($r['headers'])) {
// cURL expects full header strings in each element.
$headers = array();
foreach ($r['headers'] as $name => $value) {
$headers[] = "{$name}: {$value}";
}
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
}
if ($r['httpversion'] == '1.0') {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
} else {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
}
/**
* Fires before the cURL request is executed.
*
* Cookies are not currently handled by the HTTP API. This action allows
* plugins to handle cookies themselves.
*
* @since 2.8.0
*
* @param resource &$handle The cURL handle returned by curl_init().
* @param array $r The HTTP request arguments.
* @param string $url The request URL.
*/
do_action_ref_array('http_api_curl', array(&$handle, $r, $url));
// We don't need to return the body, so don't. Just execute request and return.
if (!$r['blocking']) {
curl_exec($handle);
if ($curl_error = curl_error($handle)) {
curl_close($handle);
return new WP_Error('http_request_failed', $curl_error);
}
if (in_array(curl_getinfo($handle, CURLINFO_HTTP_CODE), array(301, 302))) {
curl_close($handle);
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
curl_close($handle);
return array('headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array());
}
curl_exec($handle);
$theHeaders = WP_Http::processHeaders($this->headers, $url);
$theBody = $this->body;
$bytes_written_total = $this->bytes_written_total;
$this->headers = '';
$this->body = '';
$this->bytes_written_total = 0;
$curl_error = curl_errno($handle);
// If an error occurred, or, no response.
if ($curl_error || 0 == strlen($theBody) && empty($theHeaders['headers'])) {
if (CURLE_WRITE_ERROR == $curl_error) {
if (!$this->max_body_length || $this->max_body_length != $bytes_written_total) {
if ($r['stream']) {
curl_close($handle);
fclose($this->stream_handle);
return new WP_Error('http_request_failed', __('Failed to write request to temporary file.'));
} else {
curl_close($handle);
return new WP_Error('http_request_failed', curl_error($handle));
}
}
} else {
if ($curl_error = curl_error($handle)) {
curl_close($handle);
return new WP_Error('http_request_failed', $curl_error);
}
}
if (in_array(curl_getinfo($handle, CURLINFO_HTTP_CODE), array(301, 302))) {
curl_close($handle);
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
}
curl_close($handle);
if ($r['stream']) {
fclose($this->stream_handle);
}
$response = array('headers' => $theHeaders['headers'], 'body' => null, 'response' => $theHeaders['response'], 'cookies' => $theHeaders['cookies'], 'filename' => $r['filename']);
// Handle redirects.
if (false !== ($redirect_response = WP_HTTP::handle_redirects($url, $r, $response))) {
return $redirect_response;
}
if (true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders['headers'])) {
$theBody = WP_Http_Encoding::decompress($theBody);
}
$response['body'] = $theBody;
return $response;
}
示例4: http
/**
* Make an HTTP request
*
* @return API results
*/
function http($url, $method, $postfields = null, $multi = false)
{
if ($method == 'POST') {
$multi = WP_Http::processHeaders($multi);
$header = array("Content-Type" => "application/atom+xml");
$header = array_merge($header, $multi['headers']);
}
$params = array("method" => $method, "body" => $postfields, "headers" => $header);
return class_http($url, $params);
}
示例5: request
//.........这里部分代码省略.........
}
if (is_array($r['headers'])) {
foreach ((array) $r['headers'] as $header => $headerValue) {
$strHeaders .= $header . ': ' . $headerValue . "\r\n";
}
} else {
$strHeaders .= $r['headers'];
}
if ($proxy->use_authentication()) {
$strHeaders .= $proxy->authentication_header() . "\r\n";
}
$strHeaders .= "\r\n";
if (!is_null($r['body'])) {
$strHeaders .= $r['body'];
}
fwrite($handle, $strHeaders);
if (!$r['blocking']) {
stream_set_blocking($handle, 0);
fclose($handle);
return array('headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array());
}
$strResponse = '';
$bodyStarted = false;
$keep_reading = true;
$block_size = 4096;
if (isset($r['limit_response_size'])) {
$block_size = min($block_size, $r['limit_response_size']);
}
// If streaming to a file setup the file handle.
if ($r['stream']) {
if (!WP_DEBUG) {
$stream_handle = @fopen($r['filename'], 'w+');
} else {
$stream_handle = fopen($r['filename'], 'w+');
}
if (!$stream_handle) {
return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $r['filename']));
}
$bytes_written = 0;
while (!feof($handle) && $keep_reading) {
$block = fread($handle, $block_size);
if (!$bodyStarted) {
$strResponse .= $block;
if (strpos($strResponse, "\r\n\r\n")) {
$process = WP_Http::processResponse($strResponse);
$bodyStarted = true;
$block = $process['body'];
unset($strResponse);
$process['body'] = '';
}
}
$this_block_size = strlen($block);
if (isset($r['limit_response_size']) && $bytes_written + $this_block_size > $r['limit_response_size']) {
$this_block_size = $r['limit_response_size'] - $bytes_written;
$block = substr($block, 0, $this_block_size);
}
$bytes_written_to_file = fwrite($stream_handle, $block);
if ($bytes_written_to_file != $this_block_size) {
fclose($handle);
fclose($stream_handle);
return new WP_Error('http_request_failed', __('Failed to write request to temporary file.'));
}
$bytes_written += $bytes_written_to_file;
$keep_reading = !isset($r['limit_response_size']) || $bytes_written < $r['limit_response_size'];
}
fclose($stream_handle);
} else {
$header_length = 0;
while (!feof($handle) && $keep_reading) {
$block = fread($handle, $block_size);
$strResponse .= $block;
if (!$bodyStarted && strpos($strResponse, "\r\n\r\n")) {
$header_length = strpos($strResponse, "\r\n\r\n") + 4;
$bodyStarted = true;
}
$keep_reading = !$bodyStarted || !isset($r['limit_response_size']) || strlen($strResponse) < $header_length + $r['limit_response_size'];
}
$process = WP_Http::processResponse($strResponse);
unset($strResponse);
}
fclose($handle);
$arrHeaders = WP_Http::processHeaders($process['headers'], $url);
$response = array('headers' => $arrHeaders['headers'], 'body' => null, 'response' => $arrHeaders['response'], 'cookies' => $arrHeaders['cookies'], 'filename' => $r['filename']);
// Handle redirects.
if (false !== ($redirect_response = WP_Http::handle_redirects($url, $r, $response))) {
return $redirect_response;
}
// If the body was chunk encoded, then decode it.
if (!empty($process['body']) && isset($arrHeaders['headers']['transfer-encoding']) && 'chunked' == $arrHeaders['headers']['transfer-encoding']) {
$process['body'] = WP_Http::chunkTransferDecode($process['body']);
}
if (true === $r['decompress'] && true === WP_Http_Encoding::should_decode($arrHeaders['headers'])) {
$process['body'] = WP_Http_Encoding::decompress($process['body']);
}
if (isset($r['limit_response_size']) && strlen($process['body']) > $r['limit_response_size']) {
$process['body'] = substr($process['body'], 0, $r['limit_response_size']);
}
$response['body'] = $process['body'];
return $response;
}
示例6: request
//.........这里部分代码省略.........
curl_setopt($handle, CURLOPT_PROXY, $proxy->host());
curl_setopt($handle, CURLOPT_PROXYPORT, $proxy->port());
} else {
curl_setopt($handle, CURLOPT_PROXY, $proxy->host() . ':' . $proxy->port());
}
if ($proxy->use_authentication()) {
if ($isPHP5) {
curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
}
curl_setopt($handle, CURLOPT_PROXYUSERPWD, $proxy->authentication());
}
}
$is_local = isset($args['local']) && $args['local'];
$ssl_verify = isset($args['sslverify']) && $args['sslverify'];
if ($is_local) {
$ssl_verify = apply_filters('https_local_ssl_verify', $ssl_verify);
} elseif (!$is_local) {
$ssl_verify = apply_filters('https_ssl_verify', $ssl_verify);
}
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, $ssl_verify);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify);
curl_setopt($handle, CURLOPT_USERAGENT, $r['user-agent']);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $r['timeout']);
curl_setopt($handle, CURLOPT_TIMEOUT, $r['timeout']);
curl_setopt($handle, CURLOPT_MAXREDIRS, $r['redirection']);
switch ($r['method']) {
case 'HEAD':
curl_setopt($handle, CURLOPT_NOBODY, true);
break;
case 'POST':
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $r['body']);
break;
case 'PUT':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, $r['body']);
break;
}
if (true === $r['blocking']) {
curl_setopt($handle, CURLOPT_HEADER, true);
} else {
curl_setopt($handle, CURLOPT_HEADER, false);
}
// The option doesn't work with safe mode or when open_basedir is set.
if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
}
if (!empty($r['headers'])) {
// cURL expects full header strings in each element
$headers = array();
foreach ($r['headers'] as $name => $value) {
$headers[] = "{$name}: {$value}";
}
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
}
if ($r['httpversion'] == '1.0') {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
} else {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
}
// Cookies are not handled by the HTTP API currently. Allow for plugin authors to handle it
// themselves... Although, it is somewhat pointless without some reference.
do_action_ref_array('http_api_curl', array(&$handle));
// We don't need to return the body, so don't. Just execute request and return.
if (!$r['blocking']) {
curl_exec($handle);
curl_close($handle);
return array('headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array());
}
$theResponse = curl_exec($handle);
if (!empty($theResponse)) {
$headerLength = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
$theHeaders = trim(substr($theResponse, 0, $headerLength));
$theBody = substr($theResponse, $headerLength);
if (false !== strrpos($theHeaders, "\r\n\r\n")) {
$headerParts = explode("\r\n\r\n", $theHeaders);
$theHeaders = $headerParts[count($headerParts) - 1];
}
$theHeaders = WP_Http::processHeaders($theHeaders);
} else {
if ($curl_error = curl_error($handle)) {
return new WP_Error('http_request_failed', $curl_error);
}
if (in_array(curl_getinfo($handle, CURLINFO_HTTP_CODE), array(301, 302))) {
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
$theHeaders = array('headers' => array(), 'cookies' => array());
$theBody = '';
}
$response = array();
$response['code'] = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$response['message'] = get_status_header_desc($response['code']);
curl_close($handle);
if (true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders['headers'])) {
$theBody = WP_Http_Encoding::decompress($theBody);
}
return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response, 'cookies' => $theHeaders['cookies']);
}
示例7: request
/**
* Send a HTTP request to a URI using cURL extension.
*
* @access public
* @since 2.7.0
*
* @param string $url
* @param str|array $args Optional. Override the defaults.
* @return array 'headers', 'body', and 'response' keys.
*/
function request($url, $args = array())
{
$defaults = array('method' => 'GET', 'timeout' => 5, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => null);
$r = wp_parse_args($args, $defaults);
if (isset($r['headers']['User-Agent'])) {
$r['user-agent'] = $r['headers']['User-Agent'];
unset($r['headers']['User-Agent']);
} else {
if (isset($r['headers']['user-agent'])) {
$r['user-agent'] = $r['headers']['user-agent'];
unset($r['headers']['user-agent']);
}
}
// cURL extension will sometimes fail when the timeout is less than 1 as
// it may round down to 0, which gives it unlimited timeout.
if ($r['timeout'] > 0 && $r['timeout'] < 1) {
$r['timeout'] = 1;
}
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
// The cURL extension requires that the option be set for the HEAD to
// work properly.
if ('HEAD' === $r['method']) {
curl_setopt($handle, CURLOPT_NOBODY, true);
}
if (true === $r['blocking']) {
curl_setopt($handle, CURLOPT_HEADER, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
} else {
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 0);
}
curl_setopt($handle, CURLOPT_USERAGENT, $r['user-agent']);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($handle, CURLOPT_TIMEOUT, $r['timeout']);
curl_setopt($handle, CURLOPT_MAXREDIRS, $r['redirection']);
// The option doesn't work with safe mode or when open_basedir is set.
if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
}
if (!is_null($r['headers'])) {
curl_setopt($handle, CURLOPT_HTTPHEADER, $r['headers']);
}
if ($r['httpversion'] == '1.0') {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
} else {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
}
// Cookies are not handled by the HTTP API currently. Allow for plugin
// authors to handle it themselves... Although, it is somewhat pointless
// without some reference.
do_action_ref_array('http_api_curl', array(&$handle));
// We don't need to return the body, so don't. Just execution request
// and return.
if (!$r['blocking']) {
curl_exec($handle);
curl_close($handle);
return array('headers' => array(), 'body' => '', 'response' => array('code', 'message'));
}
$theResponse = curl_exec($handle);
if (!empty($theResponse)) {
$headerLength = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
$theHeaders = trim(substr($theResponse, 0, $headerLength));
$theBody = substr($theResponse, $headerLength);
if (false !== strrpos($theHeaders, "\r\n\r\n")) {
$headerParts = explode("\r\n\r\n", $theHeaders);
$theHeaders = $headerParts[count($headerParts) - 1];
}
$theHeaders = WP_Http::processHeaders($theHeaders);
} else {
if ($curl_error = curl_error($handle)) {
return new WP_Error('http_request_failed', $curl_error);
}
if (in_array(curl_getinfo($handle, CURLINFO_HTTP_CODE), array(301, 302))) {
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
$theHeaders = array('headers' => array());
$theBody = '';
}
$response = array();
$response['code'] = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$response['message'] = get_status_header_desc($response['code']);
curl_close($handle);
if (true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders)) {
$theBody = WP_Http_Encoding::decompress($theBody);
}
return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response);
}
示例8: request
//.........这里部分代码省略.........
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($handle, CURLOPT_TIMEOUT, $timeout);
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, $ssl_verify === true ? 2 : false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify);
curl_setopt($handle, CURLOPT_USERAGENT, $r['user-agent']);
curl_setopt($handle, CURLOPT_MAXREDIRS, $r['redirection']);
switch ($r['method']) {
case 'HEAD':
curl_setopt($handle, CURLOPT_NOBODY, true);
break;
case 'POST':
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $r['body']);
break;
case 'PUT':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, $r['body']);
break;
}
if (true === $r['blocking']) {
curl_setopt($handle, CURLOPT_HEADERFUNCTION, array(&$this, 'stream_headers'));
}
curl_setopt($handle, CURLOPT_HEADER, false);
// If streaming to a file open a file handle, and setup our curl streaming handler
if ($r['stream']) {
if (!WP_DEBUG) {
$stream_handle = @fopen($r['filename'], 'w+');
} else {
$stream_handle = fopen($r['filename'], 'w+');
}
if (!$stream_handle) {
return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $r['filename']));
}
curl_setopt($handle, CURLOPT_FILE, $stream_handle);
}
// The option doesn't work with safe mode or when open_basedir is set.
if (!ini_get('safe_mode') && !ini_get('open_basedir') && 0 !== $r['_redirection']) {
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
}
if (!empty($r['headers'])) {
// cURL expects full header strings in each element
$headers = array();
foreach ($r['headers'] as $name => $value) {
$headers[] = "{$name}: {$value}";
}
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
}
if ($r['httpversion'] == '1.0') {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
} else {
curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
}
// Cookies are not handled by the HTTP API currently. Allow for plugin authors to handle it
// themselves... Although, it is somewhat pointless without some reference.
do_action_ref_array('http_api_curl', array(&$handle));
// We don't need to return the body, so don't. Just execute request and return.
if (!$r['blocking']) {
curl_exec($handle);
curl_close($handle);
return array('headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array());
}
$theResponse = curl_exec($handle);
$theBody = '';
$theHeaders = WP_Http::processHeaders($this->headers);
if (strlen($theResponse) > 0 && !is_bool($theResponse)) {
// is_bool: when using $args['stream'], curl_exec will return (bool)true
$theBody = $theResponse;
}
// If no response, and It's not a HEAD request with valid headers returned
if (0 == strlen($theResponse) && ('HEAD' != $args['method'] || empty($this->headers))) {
if ($curl_error = curl_error($handle)) {
return new WP_Error('http_request_failed', $curl_error);
}
if (in_array(curl_getinfo($handle, CURLINFO_HTTP_CODE), array(301, 302))) {
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
}
unset($this->headers);
$response = array();
$response['code'] = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$response['message'] = get_status_header_desc($response['code']);
curl_close($handle);
if ($r['stream']) {
fclose($stream_handle);
}
// See #11305 - When running under safe mode, redirection is disabled above. Handle it manually.
if (!empty($theHeaders['headers']['location']) && (ini_get('safe_mode') || ini_get('open_basedir')) && 0 !== $r['_redirection']) {
if ($r['redirection']-- > 0) {
return $this->request($theHeaders['headers']['location'], $r);
} else {
return new WP_Error('http_request_failed', __('Too many redirects.'));
}
}
if (true === $r['decompress'] && true === WP_Http_Encoding::should_decode($theHeaders['headers'])) {
$theBody = WP_Http_Encoding::decompress($theBody);
}
return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response, 'cookies' => $theHeaders['cookies'], 'filename' => $r['filename']);
}
示例9: fv_wp_flowplayer_check_files
function fv_wp_flowplayer_check_files()
{
if (stripos($_SERVER['HTTP_REFERER'], home_url()) === 0) {
global $wpdb;
define('VIDEO_DIR', '/videos/');
$bNotDone = false;
$tStart = microtime(true);
$tMax = @ini_get('max_execution_time') ? @ini_get('max_execution_time') - 5 : 25;
$videos1 = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type != 'revision' AND post_status != 'trash' AND post_content LIKE '%[flowplayer %'");
$videos2 = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_type != 'revision' AND post_status != 'trash' AND post_content LIKE '%[fvplayer %'");
$videos = array_merge($videos1, $videos2);
$source_servers = array();
$shortcodes_count = 0;
$src_count = 0;
if (count($videos)) {
foreach ($videos as $post) {
$shortcodes_count += preg_match_all('!\\[(?:flowplayer|fvplayer)[^\\]]+\\]!', $post->post_content, $post_videos);
if (count($post_videos[0])) {
foreach ($post_videos[0] as $post_video) {
$post_video = preg_replace('!popup=\'.*\'!', '', $post_video);
$src_count += preg_match_all('!(?:src|src1|src2|src3|mp4|webm|ogv)=[\'"](.*?(?:mp4|m4v))[\'"]!', $post_video, $sources1);
$src_count += preg_match_all('!(?:src|src1|src2|src3|mp4|webm|ogv)=([^\'"].*?(?:mp4|m4v|flv))[\\s\\]]!', $post_video, $sources2);
$sources = array_merge($sources1[1], $sources2[1]);
if (count($sources)) {
foreach ($sources as $src) {
if (strpos($src, '//') === 0) {
$src = 'http:' . $src;
} else {
if (strpos($src, '/') === 0) {
$src = home_url() . $src;
} else {
if (!preg_match('!^\\S+://!', $src)) {
$src = home_url() . VIDEO_DIR . $src;
}
}
}
$server = preg_replace('!(.*?//.*?)/.+!', '$1', $src);
$source_servers[$server][] = array('src' => $src, 'post_id' => $post->ID);
}
}
}
}
}
}
$ok = array();
$errors = array();
$count = 0;
foreach ($source_servers as $server => $videos) {
$tCurrent = microtime(true);
if ($tCurrent - $tStart > $tMax) {
$bNotDone = true;
break;
}
if (stripos($videos[0]['src'], '.mp4') === FALSE) {
continue;
}
global $FV_Player_Checker;
if (stripos(trim($videos[0]['src']), 'rtmp://') === false) {
list($header, $message_out) = $FV_Player_Checker->http_request(trim($videos[0]['src']), array('quick_check' => 10, 'size' => 65536));
if ($header) {
$headers = WP_Http::processHeaders($header);
list($new_errors, $mime_type, $fatal) = $FV_Player_Checker->check_headers($headers, trim($videos[0]['src']), rand(0, 999), array('talk_bad_mime' => 'Server <code>' . $server . '</code> uses incorrect mime type for MP4 ', 'wrap' => false));
if ($fatal) {
continue;
}
if ($new_errors) {
$sPostsLinks = false;
foreach ($videos as $video) {
$sPostsLinks .= '<a href="' . home_url() . '?p=' . $video['post_id'] . '">' . $video['post_id'] . '</a> ';
}
$errors[] = implode(" ", $new_errors) . '(<a href="#" onclick="jQuery(\'#fv-flowplayer-warning-' . $count . '\').toggle(); return false">click to see a list of posts</a>) <div id="fv-flowplayer-warning-' . $count . '" style="display: none; ">' . $sPostsLinks . '</div>';
$count++;
continue;
} else {
$ok[] = 'Server <code>' . $server . '</code> appears to serve correct mime type <code>' . $mime_type . '</code> for MP4 videos.';
}
}
}
}
if ($bNotDone) {
$ok[] = '<strong>Not all the servers were checked as you use a lot of them, increase your PHP execution time or check your other videos by hand.</strong>';
}
$output = array('errors' => $errors, 'ok' => $ok);
echo '<FVFLOWPLAYER>' . json_encode($output) . '</FVFLOWPLAYER>';
die;
}
die('-1');
}
示例10: check_mimetype
public function check_mimetype($URLs = false, $meta = false)
{
add_action('http_api_curl', array('FV_Player_Checker', 'http_api_curl'));
$tStart = microtime(true);
global $fv_wp_flowplayer_ver, $fv_fp;
if (!empty($meta)) {
extract($meta, EXTR_SKIP);
}
if (defined('DOING_AJAX') && DOING_AJAX && isset($_POST['media']) && stripos($_SERVER['HTTP_REFERER'], home_url()) === 0) {
$URLs = json_decode(stripslashes(trim($_POST['media'])));
}
if (isset($URLs)) {
$all_sources = $URLs;
foreach ($all_sources as $source) {
if (preg_match('!^rtmp://!', $source, $match)) {
$found_rtmp = true;
} else {
if (!isset($media) && !preg_match('!\\.(m3u8ALLOW|m3uALLOW|avi)$!', $source)) {
$media = $source;
}
}
}
//$random = rand( 0, 10000 );
$random = isset($_POST['hash']) ? trim($_POST['hash']) : false;
if (isset($media)) {
$remotefilename = $media;
$remotefilename_encoded = flowplayer::get_encoded_url($remotefilename);
if ($fv_fp->is_secure_amazon_s3($remotefilename_encoded) || 1 > 0) {
// skip headers check for Amazon S3, as it's slow
$headers = false;
} else {
$headers = wp_remote_head(trim(str_replace(' ', '%20', $remotefilename_encoded)), array('method' => 'GET', 'redirection' => 3));
}
$bValidFile = true;
if (is_wp_error($headers)) {
$video_errors[] = 'Error checking ' . $media . '!<br />' . print_r($headers, true);
} else {
if ($headers) {
list($aVideoErrors, $sContentType, $bFatal) = $this->check_headers($headers, $remotefilename, $random);
if ($bFatal) {
$bValidFile = false;
}
if ($aVideoErrors) {
$video_errors = array_merge($video_errors, $aVideoErrors);
}
}
if (function_exists('is_utf8') && is_utf8($remotefilename)) {
$video_errors[] = '<p><strong>UTF-8 error</strong>: Your file name is using non-latin characters, the file might not play in browsers using Flash for the video!</p>';
}
if (@ini_get('safe_mode')) {
$video_warnings[] = 'Detailed video check is not available with PHP Safe Mode On. Please contact your webhost support.';
} else {
if (!class_exists('getID3')) {
require ABSPATH . WPINC . '/ID3/getid3.php';
}
$getID3 = new getID3();
if (!function_exists('curl_init')) {
$video_errors[] = 'cURL for PHP not found, please contact your server administrator.';
} else {
$message = '<p>Analysis of <a class="bluelink" target="_blank" href="' . esc_attr($remotefilename_encoded) . '">' . $remotefilename_encoded . '</a></p>';
// taken from: http://www.getid3.org/phpBB3/viewtopic.php?f=3&t=1141
$upload_dir = wp_upload_dir();
$localtempfilename = trailingslashit($upload_dir['basedir']) . 'fv_flowlayer_tmp_' . md5(rand(1, 999)) . '_' . basename(substr($remotefilename_encoded, 0, 32));
$out = fopen($localtempfilename, 'wb');
if ($out) {
$aArgs = array('file' => $localtempfilename);
if (!$this->is_cron) {
$aArgs['quick_check'] = apply_filters('fv_flowplayer_checker_timeout_quick', 2);
}
list($header, $sHTTPError) = $this->http_request($remotefilename_encoded, $aArgs);
$video_errors = array();
if ($sHTTPError) {
$video_errors[] = $sHTTPError;
$bValidFile = false;
}
fclose($out);
if (!$headers) {
$headers = WP_Http::processHeaders($header);
list($aVideoErrors, $sContentType, $bFatal) = $this->check_headers($headers, $remotefilename, $random);
if ($bFatal) {
$bValidFile = false;
}
if ($aVideoErrors) {
$video_errors = array_merge($video_errors, $aVideoErrors);
}
if (isset($hearders['headers']['server']) && $hearders['headers']['server'] == 'AmazonS3' && $headers['response']['code'] == '403') {
$error = new SimpleXMLElement($body);
if (stripos($error->Message, 'Request has expired') !== false) {
$video_errors[] = '<p><strong>Amazon S3</strong>: Your secure link is expired, there might be problem with your Amazon S3 plugin. Please test if the above URL opens in your browser.</p>';
} else {
$video_errors[] = '<p><strong>Amazon S3</strong>: ' . $error->Message . '</p>';
}
}
}
if ($bValidFile) {
$ThisFileInfo = $getID3->analyze($localtempfilename);
}
if (!@unlink($localtempfilename)) {
$video_errors[] = 'Can\'t remove temporary file for video analysis in <tt>' . $localtempfilename . '</tt>!';
}
//.........这里部分代码省略.........
示例11: request
/**
* Send a HTTP request to a URI using cURL extension.
*
* @access public
* @since 2.7
*
* @param string $url
* @param str|array $args Optional. Override the defaults.
* @return array 'headers', 'body', and 'response' keys.
*/
function request($url, $args = array()) {
$defaults = array(
'method' => 'GET', 'timeout' => 5,
'redirection' => 5, 'httpversion' => '1.0',
'blocking' => true,
'headers' => array(), 'body' => null
);
$r = wp_parse_args( $args, $defaults );
if ( isset($r['headers']['User-Agent']) ) {
$r['user-agent'] = $r['headers']['User-Agent'];
unset($r['headers']['User-Agent']);
} else if( isset($r['headers']['user-agent']) ) {
$r['user-agent'] = $r['headers']['user-agent'];
unset($r['headers']['user-agent']);
}
// If timeout is a float less than 1, round it up to 1.
if ( $r['timeout'] > 0 && $r['timeout'] < 1 )
$r['timeout'] = 1;
$handle = curl_init();
curl_setopt( $handle, CURLOPT_URL, $url);
if ( 'HEAD' === $r['method'] ) {
curl_setopt( $handle, CURLOPT_NOBODY, true );
}
if ( true === $r['blocking'] ) {
curl_setopt( $handle, CURLOPT_HEADER, true );
curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 1 );
} else {
curl_setopt( $handle, CURLOPT_HEADER, false );
curl_setopt( $handle, CURLOPT_NOBODY, true );
curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 0 );
}
curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] );
curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 1 );
curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] );
curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] );
if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );
if( ! is_null($r['headers']) )
curl_setopt( $handle, CURLOPT_HTTPHEADER, $r['headers'] );
if ( $r['httpversion'] == '1.0' )
curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 );
else
curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
if ( ! $r['blocking'] ) {
curl_exec( $handle );
curl_close( $handle );
return array( 'headers' => array(), 'body' => '', 'response' => array('code', 'message') );
}
$theResponse = curl_exec( $handle );
if ( !empty($theResponse) ) {
$headerLength = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
$theHeaders = trim( substr($theResponse, 0, $headerLength) );
$theBody = substr( $theResponse, $headerLength );
if ( false !== strrpos($theHeaders, "\r\n\r\n") ) {
$headerParts = explode("\r\n\r\n", $theHeaders);
$theHeaders = $headerParts[ count($headerParts) -1 ];
}
$theHeaders = WP_Http::processHeaders($theHeaders);
} else {
if ( $curl_error = curl_error($handle) )
return new WP_Error('http_request_failed', $curl_error);
if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array(301, 302) ) )
return new WP_Error('http_request_failed', __('Too many redirects.'));
$theHeaders = array( 'headers' => array() );
$theBody = '';
}
$response = array();
$response['code'] = curl_getinfo( $handle, CURLINFO_HTTP_CODE );
$response['message'] = get_status_header_desc($response['code']);
curl_close( $handle );
return array('headers' => $theHeaders['headers'], 'body' => $theBody, 'response' => $response);
}