diff options
author | Brion Vibber <brion@pobox.com> | 2009-11-02 06:56:31 -0800 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2009-11-02 07:51:29 -0800 |
commit | b22fc5b74aecd505d4e2df01258171fc65d312cf (patch) | |
tree | ea8cf7eb0d0df0a449b760778bc796d476fb4507 /plugins | |
parent | d8e2d76ba93557f8c12f966b5d0afccf9fbdc83b (diff) |
Revert "Rebuilt HTTPClient class as an extension of PEAR HTTP_Request2 package, adding redirect handling and convenience functions."
Going to restructure a little more before finalizing this...
This reverts commit fa37967858c3c29000797e510e5f98aca8ab558f.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/BlogspamNetPlugin.php | 17 | ||||
-rw-r--r-- | plugins/LinkbackPlugin.php | 36 | ||||
-rw-r--r-- | plugins/SimpleUrl/SimpleUrlPlugin.php | 11 | ||||
-rwxr-xr-x | plugins/TwitterBridge/daemons/synctwitterfriends.php | 4 | ||||
-rwxr-xr-x | plugins/TwitterBridge/daemons/twitterstatusfetcher.php | 45 | ||||
-rw-r--r-- | plugins/TwitterBridge/twitter.php | 2 | ||||
-rw-r--r-- | plugins/TwitterBridge/twitterauthorization.php | 2 | ||||
-rw-r--r-- | plugins/TwitterBridge/twitterbasicauthclient.php | 66 | ||||
-rw-r--r-- | plugins/WikiHashtagsPlugin.php | 12 |
9 files changed, 122 insertions, 73 deletions
diff --git a/plugins/BlogspamNetPlugin.php b/plugins/BlogspamNetPlugin.php index 3bdc73556..c14569746 100644 --- a/plugins/BlogspamNetPlugin.php +++ b/plugins/BlogspamNetPlugin.php @@ -22,7 +22,6 @@ * @category Plugin * @package StatusNet * @author Evan Prodromou <evan@status.net> - * @author Brion Vibber <brion@status.net> * @copyright 2009 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ @@ -70,14 +69,14 @@ class BlogspamNetPlugin extends Plugin { $args = $this->testArgs($notice); common_debug("Blogspamnet args = " . print_r($args, TRUE)); - $requestBody = xmlrpc_encode_request('testComment', array($args)); - - $request = new HTTPClient($this->baseUrl, HTTP_Request2::METHOD_POST); - $request->addHeader('Content-Type: text/xml'); - $request->setBody($requestBody); - $httpResponse = $request->send(); - - $response = xmlrpc_decode($httpResponse->getBody()); + $request = xmlrpc_encode_request('testComment', array($args)); + $context = stream_context_create(array('http' => array('method' => "POST", + 'header' => + "Content-Type: text/xml\r\n". + "User-Agent: " . $this->userAgent(), + 'content' => $request))); + $file = file_get_contents($this->baseUrl, false, $context); + $response = xmlrpc_decode($file); if (xmlrpc_is_fault($response)) { throw new ServerException("$response[faultString] ($response[faultCode])", 500); } else { diff --git a/plugins/LinkbackPlugin.php b/plugins/LinkbackPlugin.php index 0513687e9..60f7a60c7 100644 --- a/plugins/LinkbackPlugin.php +++ b/plugins/LinkbackPlugin.php @@ -129,25 +129,27 @@ class LinkbackPlugin extends Plugin } } - $request = new HTTPClient($endpoint, 'POST'); - $request->setHeader('User-Agent', $this->userAgent()); - $request->setHeader('Content-Type', 'text/xml'); - $request->setBody(xmlrpc_encode_request('pingback.ping', $args)); - try { - $response = $request->send(); - } catch (HTTP_Request2_Exception $e) { + $request = xmlrpc_encode_request('pingback.ping', $args); + $context = stream_context_create(array('http' => array('method' => "POST", + 'header' => + "Content-Type: text/xml\r\n". + "User-Agent: " . $this->userAgent(), + 'content' => $request))); + $file = file_get_contents($endpoint, false, $context); + if (!$file) { common_log(LOG_WARNING, - "Pingback request failed for '$url' ($endpoint)"); - } - $response = xmlrpc_decode($response->getBody()); - if (xmlrpc_is_fault($response)) { - common_log(LOG_WARNING, - "Pingback error for '$url' ($endpoint): ". - "$response[faultString] ($response[faultCode])"); + "Pingback request failed for '$url' ($endpoint)"); } else { - common_log(LOG_INFO, - "Pingback success for '$url' ($endpoint): ". - "'$response'"); + $response = xmlrpc_decode($file); + if (xmlrpc_is_fault($response)) { + common_log(LOG_WARNING, + "Pingback error for '$url' ($endpoint): ". + "$response[faultString] ($response[faultCode])"); + } else { + common_log(LOG_INFO, + "Pingback success for '$url' ($endpoint): ". + "'$response'"); + } } } diff --git a/plugins/SimpleUrl/SimpleUrlPlugin.php b/plugins/SimpleUrl/SimpleUrlPlugin.php index d59d63e47..82d772048 100644 --- a/plugins/SimpleUrl/SimpleUrlPlugin.php +++ b/plugins/SimpleUrl/SimpleUrlPlugin.php @@ -65,6 +65,15 @@ class SimpleUrlPlugin extends Plugin class SimpleUrl extends ShortUrlApi { protected function shorten_imp($url) { - return $this->http_get($url); + $curlh = curl_init(); + curl_setopt($curlh, CURLOPT_CONNECTTIMEOUT, 20); // # seconds to wait + curl_setopt($curlh, CURLOPT_USERAGENT, 'StatusNet'); + curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true); + + curl_setopt($curlh, CURLOPT_URL, $this->service_url.urlencode($url)); + $short_url = curl_exec($curlh); + + curl_close($curlh); + return $short_url; } } diff --git a/plugins/TwitterBridge/daemons/synctwitterfriends.php b/plugins/TwitterBridge/daemons/synctwitterfriends.php index 671e3c7af..ed2bf48a2 100755 --- a/plugins/TwitterBridge/daemons/synctwitterfriends.php +++ b/plugins/TwitterBridge/daemons/synctwitterfriends.php @@ -152,8 +152,8 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon $friends_ids = $client->friendsIds(); } catch (Exception $e) { common_log(LOG_WARNING, $this->name() . - ' - error getting friend ids: ' . - $e->getMessage()); + ' - cURL error getting friend ids ' . + $e->getCode() . ' - ' . $e->getMessage()); return $friends; } diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php index 6c91b2860..81bbbc7c5 100755 --- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php +++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php @@ -109,16 +109,12 @@ class TwitterStatusFetcher extends ParallelizingDaemon $flink->find(); $flinks = array(); - common_log(LOG_INFO, "hello"); while ($flink->fetch()) { if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) { $flinks[] = clone($flink); - common_log(LOG_INFO, "sync: foreign id $flink->foreign_id"); - } else { - common_log(LOG_INFO, "nothing to sync"); } } @@ -519,34 +515,31 @@ class TwitterStatusFetcher extends ParallelizingDaemon return $id; } - /** - * Fetch a remote avatar image and save to local storage. - * - * @param string $url avatar source URL - * @param string $filename bare local filename for download - * @return bool true on success, false on failure - */ function fetchAvatar($url, $filename) { - common_debug($this->name() . " - Fetching Twitter avatar: $url"); + $avatarfile = Avatar::path($filename); - $request = new HTTPClient($url, 'GET', array( - 'follow_redirects' => true, - )); - $data = $request->get(); - if ($data) { - $avatarfile = Avatar::path($filename); - $ok = file_put_contents($avatarfile, $data); - if (!$ok) { - common_log(LOG_WARNING, $this->name() . - " - Couldn't open file $filename"); - return false; - } - } else { + $out = fopen($avatarfile, 'wb'); + if (!$out) { + common_log(LOG_WARNING, $this->name() . + " - Couldn't open file $filename"); return false; } - return true; + common_debug($this->name() . " - Fetching Twitter avatar: $url"); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_FILE, $out); + curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); + $result = curl_exec($ch); + curl_close($ch); + + fclose($out); + + return $result; } } diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index 3c6803e49..1a5248a9b 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -215,7 +215,7 @@ function broadcast_basicauth($notice, $flink) try { $status = $client->statusesUpdate($statustxt); - } catch (HTTP_Request2_Exception $e) { + } catch (BasicAuthCurlException $e) { return process_error($e, $flink); } diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php index f1daefab1..2a93ff13e 100644 --- a/plugins/TwitterBridge/twitterauthorization.php +++ b/plugins/TwitterBridge/twitterauthorization.php @@ -125,7 +125,7 @@ class TwitterauthorizationAction extends Action $auth_link = $client->getAuthorizeLink($req_tok); - } catch (OAuthClientException $e) { + } catch (TwitterOAuthClientException $e) { $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s', $e->getCode(), $e->getMessage()); $this->serverError(_('Couldn\'t link your Twitter account.')); diff --git a/plugins/TwitterBridge/twitterbasicauthclient.php b/plugins/TwitterBridge/twitterbasicauthclient.php index e4cae7373..1040d72fb 100644 --- a/plugins/TwitterBridge/twitterbasicauthclient.php +++ b/plugins/TwitterBridge/twitterbasicauthclient.php @@ -32,6 +32,26 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { } /** + * Exception wrapper for cURL errors + * + * @category Integration + * @package StatusNet + * @author Adrian Lang <mail@adrianlang.de> + * @author Brenda Wallace <shiny@cpan.org> + * @author Craig Andrews <candrews@integralblue.com> + * @author Dan Moore <dan@moore.cx> + * @author Evan Prodromou <evan@status.net> + * @author mEDI <medi@milaro.net> + * @author Sarven Capadisli <csarven@status.net> + * @author Zach Copley <zach@status.net> * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + */ +class BasicAuthCurlException extends Exception +{ +} + +/** * Class for talking to the Twitter API with HTTP Basic Auth. * * @category Integration @@ -178,27 +198,45 @@ class TwitterBasicAuthClient */ function httpRequest($url, $params = null, $auth = true) { - $request = new HTTPClient($url, 'GET', array( - 'follow_redirects' => true, - 'connect_timeout' => 120, - 'timeout' => 120, - 'ssl_verifypeer' => false, - )); - - // Twitter is strict about accepting invalid "Expect" headers - $request->setHeader('Expect', ''); + $options = array( + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FAILONERROR => true, + CURLOPT_HEADER => false, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_USERAGENT => 'StatusNet', + CURLOPT_CONNECTTIMEOUT => 120, + CURLOPT_TIMEOUT => 120, + CURLOPT_HTTPAUTH => CURLAUTH_ANY, + CURLOPT_SSL_VERIFYPEER => false, + + // Twitter is strict about accepting invalid "Expect" headers + + CURLOPT_HTTPHEADER => array('Expect:') + ); if (isset($params)) { - $request->setMethod('POST'); - $request->addPostParameter($params); + $options[CURLOPT_POST] = true; + $options[CURLOPT_POSTFIELDS] = $params; } if ($auth) { - $request->setAuth($this->screen_name, $this->password); + $options[CURLOPT_USERPWD] = $this->screen_name . + ':' . $this->password; } - $response = $request->send(); - return $response->getBody(); + $ch = curl_init($url); + curl_setopt_array($ch, $options); + $response = curl_exec($ch); + + if ($response === false) { + $msg = curl_error($ch); + $code = curl_errno($ch); + throw new BasicAuthCurlException($msg, $code); + } + + curl_close($ch); + + return $response; } } diff --git a/plugins/WikiHashtagsPlugin.php b/plugins/WikiHashtagsPlugin.php index a9e675f5c..0c5649aa4 100644 --- a/plugins/WikiHashtagsPlugin.php +++ b/plugins/WikiHashtagsPlugin.php @@ -68,8 +68,10 @@ class WikiHashtagsPlugin extends Plugin $editurl = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=edit', urlencode($tag)); - $request = new HTTPClient($url); - $html = $request->get(); + $context = stream_context_create(array('http' => array('method' => "GET", + 'header' => + "User-Agent: " . $this->userAgent()))); + $html = @file_get_contents($url, false, $context); $action->elementStart('div', array('id' => 'wikihashtags', 'class' => 'section')); @@ -98,4 +100,10 @@ class WikiHashtagsPlugin extends Plugin return true; } + + function userAgent() + { + return 'WikiHashtagsPlugin/'.WIKIHASHTAGSPLUGIN_VERSION . + ' StatusNet/' . STATUSNET_VERSION; + } } |