3 require_once('OAuth.php');
5 class OAuthClientCurlException extends Exception { }
12 function __construct($consumer_key, $consumer_secret,
13 $oauth_token = null, $oauth_token_secret = null)
15 $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
16 $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
19 if (isset($oauth_token) && isset($oauth_token_secret)) {
20 $this->token = new OAuthToken($oauth_token, $oauth_token_secret);
24 function getRequestToken()
26 $response = $this->oAuthGet(TwitterOAuthClient::$requestTokenURL);
28 $token = new OAuthToken($oauth_token, $oauth_token_secret);
32 function getAuthorizeLink($request_token, $oauth_callback = null)
34 $url = TwitterOAuthClient::$authorizeURL . '?oauth_token=' .
37 if (isset($oauth_callback)) {
38 $url .= '&oauth_callback=' . urlencode($oauth_callback);
44 function getAccessToken()
46 $response = $this->oAuthPost(TwitterOAuthClient::$accessTokenURL);
48 $token = new OAuthToken($oauth_token, $oauth_token_secret);
52 function oAuthGet($url)
54 $request = OAuthRequest::from_consumer_and_token($this->consumer,
55 $this->token, 'GET', $url, null);
56 $request->sign_request($this->sha1_method,
57 $this->consumer, $this->token);
59 return $this->httpRequest($request->to_url());
62 function oAuthPost($url, $params = null)
64 $request = OAuthRequest::from_consumer_and_token($this->consumer,
65 $this->token, 'POST', $url, $params);
66 $request->sign_request($this->sha1_method,
67 $this->consumer, $this->token);
69 return $this->httpRequest($request->get_normalized_http_url(),
70 $request->to_postdata());
73 function httpRequest($url, $params = null)
76 CURLOPT_RETURNTRANSFER => true,
77 CURLOPT_FAILONERROR => true,
78 CURLOPT_HEADER => false,
79 CURLOPT_FOLLOWLOCATION => true,
80 CURLOPT_USERAGENT => 'Laconica',
81 CURLOPT_CONNECTTIMEOUT => 120,
82 CURLOPT_TIMEOUT => 120,
83 CURLOPT_HTTPAUTH => CURLAUTH_ANY,
84 CURLOPT_SSL_VERIFYPEER => false,
86 // Twitter is strict about accepting invalid "Expect" headers
88 CURLOPT_HTTPHEADER => array('Expect:')
92 $options[CURLOPT_POST] = true;
93 $options[CURLOPT_POSTFIELDS] = $params;
96 $ch = curl_init($url);
97 curl_setopt_array($ch, $options);
98 $response = curl_exec($ch);
100 if ($response === false) {
101 $msg = curl_error($ch);
102 $code = curl_errno($ch);
103 throw new OAuthClientCurlException($msg, $code);