<?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
* uppercase.
*
* @param string $method an HTTP method such as GET or POST
* @return void value is stored to the class variable 'method'
*/
private function prepare_method($method) {
$this->method = strtoupper($method
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
756web_HTML手机电脑网站_网页源码移动端前端js效果_H5模板_自适应css源码ui组件.zip (205个子文件)
bootstrap.min.css 113KB
style.css 62KB
prettyPhoto.css 19KB
font-awesome.min.css 17KB
bootstrap-responsive.min.css 16KB
navigation-style-4.css 5KB
navigation-style-2.css 4KB
navigation-style-3.css 4KB
navigation-style-1.css 4KB
jquery.bxslider.css 4KB
color-yellow.css 2KB
color-green.css 2KB
color-blue.css 2KB
color-red.css 2KB
color-gray.css 2KB
fontawesome-webfont.eot 37KB
fontawesome-webfont.eot 37KB
preload.gif 11KB
ajax-loader.gif 9KB
loader.gif 6KB
newave-loading.gif 5KB
loader.gif 2KB
loader.gif 2KB
loader.gif 2KB
loader.gif 2KB
default_thumbnail.gif 227B
shortcodes.html 45KB
index-2.html 42KB
index-1.html 40KB
index-4.html 39KB
index-3.html 39KB
index.html 39KB
blog-masonry.html 26KB
blog.html 22KB
blog-post.html 20KB
project-external-1.html 14KB
404.html 4KB
project-normal-expander-2.html 2KB
project-video-expander.html 2KB
project-normal-expander-1.html 2KB
project-fullscreen-expander-1.html 2KB
project-fullscreen-expander-2.html 1KB
favicon.ico 1KB
separator3.jpg 404KB
separator2.jpg 401KB
separator1.jpg 351KB
7.jpg 313KB
ps2.jpg 201KB
ps1.jpg 160KB
fs3.jpg 153KB
fs1.jpg 136KB
fs4.jpg 133KB
fs2.jpg 131KB
ps3.jpg 86KB
1.jpg 77KB
portfolio8.jpg 41KB
portfolio1.jpg 41KB
portfolio7.jpg 40KB
portfolio5.jpg 39KB
portfolio6.jpg 39KB
portfolio2.jpg 37KB
portfolio4.jpg 35KB
1a.jpg 30KB
2a.jpg 30KB
2.jpg 30KB
1.jpg 30KB
3.jpg 30KB
3a.jpg 30KB
video-placeholder.jpg 25KB
4b.jpg 24KB
4a.jpg 23KB
5a.jpg 23KB
5.jpg 22KB
4.jpg 22KB
portfolio3.jpg 22KB
jquery.js 261KB
jquery.cycle.all.js 50KB
skrollr.js 39KB
bootstrap.min.js 38KB
jquery.mb.YTPlayer.js 37KB
jquery.prettyPhoto.js 22KB
jquery.maximage.js 21KB
jquery.bxslider.min.js 19KB
isotope.js 16KB
modernizr.js 15KB
jquery.tweet.js 15KB
scripts.js 14KB
sscr.js 11KB
jquery.easing-1.3.pack.js 9KB
appear.js 6KB
jquery.sticky.js 5KB
jquery.parallax-1.1.3.js 2KB
jquery.jigowatt.js 729B
FontAwesome.otf 61KB
FontAwesome.otf 60KB
tmhOAuth.php 24KB
tmhUtilities.php 9KB
index.php 4KB
contact.php 4KB
small_right_screen.png 132KB
共 205 条
- 1
- 2
- 3
资源评论
supeerzdj
- 粉丝: 11
- 资源: 6184
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功