<?php
/**
* tmhOAuth
*
* An OAuth 1.0A library written in PHP.
* The library supports file uploading using multipart/form as well as general
* REST requests. OAuth authentication is sent using the an Authorization Header.
*
* @author themattharris
* @version 0.7.4
*
* 19 February 2013
*/
class tmhOAuth {
const VERSION = '0.7.4';
var $response = array();
/**
* Creates a new tmhOAuth object
*
* @param string $config, the configuration to use for this request
* @return void
*/
public function __construct($config=array()) {
$this->params = array();
$this->headers = array();
$this->auto_fixed_time = false;
$this->buffer = null;
// default configuration options
$this->config = array_merge(
array(
// leave 'user_agent' blank for default, otherwise set this to
// something that clearly identifies your app
'user_agent' => '',
// default timezone for requests
'timezone' => 'UTC',
'use_ssl' => true,
'host' => 'api.twitter.com',
'consumer_key' => '',
'consumer_secret' => '',
'user_token' => '',
'user_secret' => '',
'force_nonce' => false,
'nonce' => false, // used for checking signatures. leave as false for auto
'force_timestamp' => false,
'timestamp' => false, // used for checking signatures. leave as false for auto
// oauth signing variables that are not dynamic
'oauth_version' => '1.0',
'oauth_signature_method' => 'HMAC-SHA1',
// you probably don't want to change any of these curl values
'curl_connecttimeout' => 30,
'curl_timeout' => 10,
// for security this should always be set to 2.
'curl_ssl_verifyhost' => 2,
// for security this should always be set to true.
'curl_ssl_verifypeer' => true,
// you can get the latest cacert.pem from here http://curl.haxx.se/ca/cacert.pem
'curl_cainfo' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem',
'curl_capath' => dirname(__FILE__),
'curl_followlocation' => false, // whether to follow redirects or not
// support for proxy servers
'curl_proxy' => false, // really you don't want to use this if you are using streaming
'curl_proxyuserpwd' => false, // format username:password for proxy, if required
'curl_encoding' => '', // leave blank for all supported formats, else use gzip, deflate, identity
// streaming API
'is_streaming' => false,
'streaming_eol' => "\r\n",
'streaming_metrics_interval' => 60,
// header or querystring. You should always use header!
// this is just to help me debug other developers implementations
'as_header' => true,
'debug' => false,
),
$config
);
$this->set_user_agent();
date_default_timezone_set($this->config['timezone']);
}
/**
* Sets the useragent for PHP to use
* If '$this->config['user_agent']' already has a value it is used instead of one
* being generated.
*
* @return void value is stored to the config array class variable
*/
private function set_user_agent() {
if (!empty($this->config['user_agent']))
return;
if ($this->config['curl_ssl_verifyhost'] && $this->config['curl_ssl_verifypeer']) {
$ssl = '+SSL';
} else {
$ssl = '-SSL';
}
$ua = 'tmhOAuth ' . self::VERSION . $ssl . ' - //github.com/themattharris/tmhOAuth';
$this->config['user_agent'] = $ua;
}
/**
* Generates a random OAuth nonce.
* If 'force_nonce' is true a nonce is not generated and the value in the configuration will be retained.
*
* @param string $length how many characters the nonce should be before MD5 hashing. default 12
* @param string $include_time whether to include time at the beginning of the nonce. default true
* @return void value is stored to the config array class variable
*/
private function create_nonce($length=12, $include_time=true) {
if ($this->config['force_nonce'] == false) {
$sequence = array_merge(range(0,9), range('A','Z'), range('a','z'));
$length = $length > count($sequence) ? count($sequence) : $length;
shuffle($sequence);
$prefix = $include_time ? microtime() : '';
$this->config['nonce'] = md5(substr($prefix . implode('', $sequence), 0, $length));
}
}
/**
* Generates a timestamp.
* If 'force_timestamp' is true a nonce is not generated and the value in the configuration will be retained.
*
* @return void value is stored to the config array class variable
*/
private function create_timestamp() {
$this->config['timestamp'] = ($this->config['force_timestamp'] == false ? time() : $this->config['timestamp']);
}
/**
* Encodes the string or array passed in a way compatible with OAuth.
* If an array is passed each array value will will be encoded.
*
* @param mixed $data the scalar or array to encode
* @return $data encoded in a way compatible with OAuth
*/
private function safe_encode($data) {
if (is_array($data)) {
return array_map(array($this, 'safe_encode'), $data);
} else if (is_scalar($data)) {
return str_ireplace(
array('+', '%7E'),
array(' ', '~'),
rawurlencode($data)
);
} else {
return '';
}
}
/**
* Decodes the string or array from it's URL encoded form
* If an array is passed each array value will will be decoded.
*
* @param mixed $data the scalar or array to decode
* @return string $data decoded from the URL encoded form
*/
private function safe_decode($data) {
if (is_array($data)) {
return array_map(array($this, 'safe_decode'), $data);
} else if (is_scalar($data)) {
return rawurldecode($data);
} else {
return '';
}
}
/**
* Returns an array of the standard OAuth parameters.
*
* @return array all required OAuth parameters, safely encoded
*/
private function get_defaults() {
$defaults = array(
'oauth_version' => $this->config['oauth_version'],
'oauth_nonce' => $this->config['nonce'],
'oauth_timestamp' => $this->config['timestamp'],
'oauth_consumer_key' => $this->config['consumer_key'],
'oauth_signature_method' => $this->config['oauth_signature_method'],
);
// include the user token if it exists
if ( $this->config['user_token'] )
$defaults['oauth_token'] = $this->config['user_token'];
// safely encode
foreach ($defaults as $k => $v) {
$_defaults[$this->safe_encode($k)] = $this->safe_encode($v);
}
return $_defaults;
}
/**
* Extracts and decodes OAuth parameters from the passed string
*
* @param string $body the response body from an OAuth flow method
* @return array the response body safely decoded to an array of key => values
*/
public function extract_params($body) {
$kvs = explode('&', $body);
$decoded = array();
foreach ($kvs as $kv) {
$kv = explode('=', $kv, 2);
$kv[0] = $this->safe_decode($kv[0]);
$kv[1] = $this->safe_decode($kv[1]);
$decoded[$kv[0]] = $kv[1];
}
return $decoded;
}
/**
* Prepares the HTTP method for use in the base string by converting it to
* upperc
没有合适的资源?快使用搜索试试~ 我知道了~
蓝色大气政府新闻门户网站模板-蓝色 大气 政府 新闻 门户 整站 企业 商务 漂亮 精品 简洁 幻灯 css3动画
共944个文件
jpg:310个
png:286个
html:96个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 80 浏览量
2023-02-25
09:50:21
上传
评论
收藏 19.4MB RAR 举报
温馨提示
蓝色大气政府新闻门户网站模板_蓝色 大气 政府 新闻 门户 整站 企业 商务 漂亮 精品 简洁 幻灯 css3动画 css3 html5 标准 bootstrap 手机 响应式 宽屏 标准 教育 培训 学校.rar
资源推荐
资源详情
资源评论
收起资源包目录
蓝色大气政府新闻门户网站模板-蓝色 大气 政府 新闻 门户 整站 企业 商务 漂亮 精品 简洁 幻灯 css3动画 (944个子文件)
VideoFallback.as 13KB
VideoFallback.as 13KB
MusicPlayer.as 3KB
MusicPlayer.as 3KB
VideoControls.as 3KB
VideoControls.as 3KB
BigPlayButton.as 2KB
BigPlayButton.as 2KB
VideoBtn.as 941B
VideoBtn.as 941B
VideosEvent.as 558B
VideosEvent.as 558B
FullScreenOff.as 168B
FullScreenOff.as 168B
FullScreenOn.as 167B
FullScreenOn.as 167B
PauseButton.as 165B
VolumeTotal.as 165B
PauseButton.as 165B
VolumeTotal.as 165B
PlayButton.as 163B
PlayButton.as 163B
VolumeOff.as 161B
TotalLine.as 161B
VolumeOff.as 161B
TotalLine.as 161B
VolumeOn.as 159B
VolumeOn.as 159B
fontello-embedded.css 1.3MB
fontello-embedded.css 1.3MB
fontello-ie7.css 218KB
fontello-ie7.css 218KB
fontello-ie7-codes.css 218KB
fontello-ie7-codes.css 218KB
style.css 126KB
style.css 126KB
fontello.css 118KB
fontello.css 118KB
fontello-codes.css 116KB
fontello-codes.css 116KB
bootstrap.min.css 28KB
bootstrap.min.css 28KB
settings-ie8.css 26KB
settings-ie8.css 26KB
settings.css 23KB
settings.css 22KB
video-js.css 21KB
video-js.css 21KB
jackbox.min.css 16KB
jackbox.min.css 16KB
chosen.css 12KB
chosen.css 12KB
video-js.min.css 11KB
video-js.min.css 11KB
jackbox-video.min.css 7KB
jackbox-video.min.css 7KB
flexslider.css 6KB
flexslider.css 6KB
jackbox-audio.min.css 3KB
jackbox-audio.min.css 3KB
ie.css 3KB
ie.css 3KB
owl.carousel.css 2KB
owl.carousel.css 2KB
responsive-calendar.css 1KB
responsive-calendar.css 1KB
cloud-zoom.css 742B
cloud-zoom.css 742B
jackbox-ie8.css 592B
jackbox-ie8.css 592B
ie9.css 275B
ie9.css 275B
jackbox-ie9.css 202B
jackbox-ie9.css 202B
Thumbs.db 20KB
Thumbs.db 20KB
.DS_Store 12KB
.DS_Store 12KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
fontello.eot 569KB
fontello.eot 569KB
revicons.eot 12KB
revicons.eot 12KB
vjs.eot 3KB
vjs.eot 3KB
flexslider-icon.eot 2KB
flexslider-icon.eot 2KB
video_fallback.fla 49KB
video_fallback.fla 49KB
audio_fallback.fla 7KB
audio_fallback.fla 7KB
preloader@2x.gif 19KB
preloader@2x.gif 19KB
共 944 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
reg183
- 粉丝: 1809
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功