/** * Create an HTTP_Request object and set all parameters necessary to * perform fetches for this comic. * * @param timestamp $date Date of the comic to retrieve (default today) */ function _initHTTP($date, $url) { if (is_null($this->http)) { $options = array(); if (isset($GLOBALS['conf']['http']['proxy']) && !empty($GLOBALS['conf']['http']['proxy']['proxy_host'])) { $options = array_merge($options, $GLOBALS['conf']['http']['proxy']); } require_once 'HTTP/Request.php'; $this->http = new HTTP_Request($url, $options); $v = $this->getOverride("referer", $date); if (!is_null($v)) { $this->http->addHeader('Referer', $v); } $v = $this->getOverride("agent"); if (!is_null($v)) { $this->http->addHeader('User-Agent', $v); } $user = $this->getOverride("user", $date); $pass = $this->getOverride("pass", $date); if (!is_null($user) and !is_null($pass)) { $this->http->setBasicAuth($user, $pass); } foreach ($this->getOverride('cookies', $date) as $name => $value) { $this->http->addCookie($name, $value); } foreach ($this->getOverride('headers', $date) as $name => $value) { $this->addHeader($name, $value); } } }
/** * 配信サーバへリクエストを送信する. * * @param string $mode * @param array $arrParams 追加パラメータ.連想配列で渡す. * @return string|object レスポンスボディ|エラー時にはPEAR::Errorオブジェクトを返す. */ function request($mode, $arrParams = array(), $arrCookies = array()) { $objReq = new HTTP_Request(); $objReq->setUrl(OSTORE_URL . 'upgrade/index.php'); $objReq->setMethod('POST'); $objReq->addPostData('mode', $mode); $objReq->addPostDataArray($arrParams); foreach ($arrCookies as $cookie) { $objReq->addCookie($cookie['name'], $cookie['value']); } $e = $objReq->sendRequest(); if (PEAR::isError($e)) { return $e; } else { return $objReq; } }
private function SetTimezone() { $request = new HTTP_Request(OX_URL . "/config/timezone", array("method" => "GET")); foreach ($this->cookies as $cookie) { $request->addCookie($cookie["name"], $cookie["value"]); } $request->addQueryString("session", $this->session); try { $request->sendRequest(); if ($request->getResponseCode() == 200) { $reply = $this->json->decode($request->getResponseBody()); $timezone = $reply["data"]; date_default_timezone_set($timezone); $this->timezone = $timezone; $this->offset = date("Z"); //date_default_timezone_set("UTC"); } else { return false; } } catch (HTTP_Exception $e) { echo $e->getMessage(); return false; } }
/** * Execute external or internal URLs and return server response. * * @param string $url * Request URL. * @param bool $addCookie * Whether to provide a cookie. Should be true to access internal URLs. * * @return string * Response from URL. */ public static function getServerResponse($url, $addCookie = TRUE) { CRM_Core_TemporaryErrorScope::ignoreException(); require_once 'HTTP/Request.php'; $request = new HTTP_Request($url); if ($addCookie) { foreach ($_COOKIE as $name => $value) { $request->addCookie($name, $value); } } if (isset($_SERVER['AUTH_TYPE'])) { $request->setBasicAuth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); } $config = CRM_Core_Config::singleton(); if ($config->userFramework == 'WordPress') { session_write_close(); } $request->sendRequest(); $response = $request->getResponseBody(); return $response; }
function _request($url, $body = null, $content_type = 'text/html', $method = 'GET', $headers = array(), $cookies = array()) { set_include_path(_XE_PATH_ . "libs/PEAR"); require_once 'PEAR.php'; require_once 'HTTP/Request.php'; $url_info = parse_url($url); $host = $url_info['host']; if (__PROXY_SERVER__ !== null) { $oRequest = new HTTP_Request(__PROXY_SERVER__); $oRequest->setMethod('POST'); $oRequest->addPostData('arg', serialize(array('Destination' => $url, 'method' => $method, 'body' => $body, 'content_type' => $content_type, "headers" => $headers))); } else { $oRequest = new HTTP_Request($url); if (count($headers)) { foreach ($headers as $key => $val) { $oRequest->addHeader($key, $val); } } if ($cookies[$host]) { foreach ($cookies[$host] as $key => $val) { $oRequest->addCookie($key, $val); } } if (!$content_type) { $oRequest->addHeader('Content-Type', 'text/html'); } else { $oRequest->addHeader('Content-Type', $content_type); } $oRequest->setMethod($method); if ($body) { $oRequest->setBody($body); } } $oResponse = $oRequest->sendRequest(); $code = $oRequest->getResponseCode(); $header = $oRequest->getResponseHeader(); $response = $oRequest->getResponseBody(); if ($c = $oRequest->getResponseCookies()) { foreach ($c as $k => $v) { $cookies[$host][$v['name']] = $v['value']; } } if ($code > 300 && $code < 399 && $header['location']) { return $this->_request($header['location'], $body, $content_type, $method, $headers, $cookies); } if ($code != 200) { return; } return $response; }
function s_users_by_uids(&$uids, $encoded = false) { if (!s_bad_array($uids) || !($uids = array_unique($uids)) || !($uids = array_values($uids)) || empty($uids)) { return false; } //看cache中是否存在 asort($uids); $mem = mem_cache_share(); $key = md5(MEM_CACHE_KEY_PREFIX . "_user_by_uids_" . implode(",", $uids) . strval($encoded)); if ($data = $mem->get($key)) { //缓存中已经存在 $data = json_decode($data, true); } if (!$data) { //缓存中没有,请求服务器 $max = 20; $time = 0; $times = ceil(count($uids) / $max); $list = array(); do { $ids = array(); $num0 = $time * $max; $num1 = ($time + 1) * $max - 1; foreach (range($num0, $num1) as $index) { if (!isset($uids[$index]) || intval($uids[$index]) <= 0) { break; } $ids[] = $uids[$index]; } $params = array("uids" => implode(",", $ids), "source" => APP_KEY, "cookie" => array("SUE" => $_COOKIE["SUE"], "SUP" => $_COOKIE["SUP"])); $data = s_http_get(); $req = new HTTP_Request('http://i2.api.weibo.com/2/users/show_batch.json'); $req->setMethod(HTTP_REQUEST_METHOD_GET); $req->addCookie("SUE", URLEncode($_COOKIE["SUE"])); $req->addCookie("SUP", URLEncode($_COOKIE["SUP"])); $req->addQueryString('uids', implode(",", $ids)); $req->addQueryString('is_encoded', $encoded === false ? 0 : 1); $req->addQueryString('source', MBLOG_APP_KEY); $rs = $req->sendRequest(); if (PEAR::isError($rs) || !($ret = json_decode($req->getResponseBody(), true)) || isset($ret["error_code"])) { return false; } //有可能是空数组 if (isset($ret["users"])) { $list = array_merge($list, $ret["users"]); } unset($ret); } while (++$time < $times); $data = array(); //重新组合成uid => array() foreach ($list as &$item) { if (isset($item["id"]) && $item["idstr"] > 0) { $data[$item["idstr"]] = $item; } unset($item); } //检查自己是否在数组中 if (false !== ($me = login_user_info()) && ($meid = $me["uniqueid"]) && in_array($meid, $uids) && ($me = get_user_by_token(intval($meid)))) { $data[$me["id"]] = $me; } unset($list); //缓存十小时 $mem->set($key, json_encode($data), 0, MEM_CACHE_LIFETIME_LUCKY); } return $data; }
function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array()) { requirePear(); require_once 'HTTP/Request.php'; $parsed_url = parse_url(__PROXY_SERVER__); if ($parsed_url["host"]) { $oRequest = new HTTP_Request(__PROXY_SERVER__); $oRequest->setMethod('POST'); $oRequest->_timeout = $timeout; $oRequest->addPostData('arg', serialize(array('Destination' => $url, 'method' => $method, 'body' => $body, 'content_type' => $content_type, "headers" => $headers, "post_data" => $post_data))); } else { $oRequest = new HTTP_Request($url); if (count($headers)) { foreach ($headers as $key => $val) { $oRequest->addHeader($key, $val); } } if ($cookies[$host]) { foreach ($cookies[$host] as $key => $val) { $oRequest->addCookie($key, $val); } } if (count($post_data)) { foreach ($post_data as $key => $val) { $oRequest->addPostData($key, $val); } } if (!$content_type) { $oRequest->addHeader('Content-Type', 'text/html'); } else { $oRequest->addHeader('Content-Type', $content_type); } $oRequest->setMethod($method); if ($body) { $oRequest->setBody($body); } $oRequest->_timeout = $timeout; } $oResponse = $oRequest->sendRequest(); $code = $oRequest->getResponseCode(); $header = $oRequest->getResponseHeader(); $response = $oRequest->getResponseBody(); if ($c = $oRequest->getResponseCookies()) { foreach ($c as $k => $v) { $cookies[$host][$v['name']] = $v['value']; } } if ($code > 300 && $code < 399 && $header['location']) { return FileHandler::getRemoteResource($header['location'], $body, $timeout, $method, $content_type, $headers, $cookies, $post_data); } return $response; }
static function checkURL($url, $addCookie = false) { CRM_Core_Error::ignoreException(); require_once 'HTTP/Request.php'; $params = array('method' => 'GET'); $request = new HTTP_Request($url, $params); if ($addCookie) { foreach ($_COOKIE as $name => $value) { $request->addCookie($name, $value); } } $config =& CRM_Core_Config::singleton(); if ($config->userFramework == 'Standalone') { session_write_close(); } $request->sendRequest(); $result = $request->getResponseCode() == 200 ? true : false; if ($config->userFramework == 'Standalone') { session_start(); } CRM_Core_Error::setCallback(); return $result; }
/** * Re-send a request after successful re-authentication * * Re-creates a GET or POST request based on data passed along in a form. Used * in case of an expired security token so that the user doesn't lose changes. * */ function resend_request() { global $_CONF; require_once 'HTTP/Request.php'; $method = ''; if (isset($_POST['token_requestmethod'])) { $method = COM_applyFilter($_POST['token_requestmethod']); } $returnurl = ''; if (isset($_POST['token_returnurl'])) { $returnurl = urldecode($_POST['token_returnurl']); if (substr($returnurl, 0, strlen($_CONF['site_url'])) != $_CONF['site_url']) { // only accept URLs on our site $returnurl = ''; } } $postdata = ''; if (isset($_POST['token_postdata'])) { $postdata = urldecode($_POST['token_postdata']); } $getdata = ''; if (isset($_POST['token_getdata'])) { $getdata = urldecode($_POST['token_getdata']); } $files = ''; if (isset($_POST['token_files'])) { $files = urldecode($_POST['token_files']); } if (SECINT_checkToken() && !empty($method) && !empty($returnurl) && ($method == 'POST' && !empty($postdata) || $method == 'GET' && !empty($getdata))) { $magic = get_magic_quotes_gpc(); $req = new HTTP_Request($returnurl); if ($method == 'POST') { $req->setMethod(HTTP_REQUEST_METHOD_POST); $data = unserialize($postdata); foreach ($data as $key => $value) { if ($key == CSRF_TOKEN) { $req->addPostData($key, SEC_createToken()); } else { if ($magic) { $value = stripslashes_gpc_recursive($value); } $req->addPostData($key, $value); } } if (!empty($files)) { $files = unserialize($files); } if (!empty($files)) { foreach ($files as $key => $value) { $req->addPostData('_files_' . $key, $value); } } } else { $req->setMethod(HTTP_REQUEST_METHOD_GET); $data = unserialize($getdata); foreach ($data as $key => $value) { if ($key == CSRF_TOKEN) { $req->addQueryString($key, SEC_createToken()); } else { if ($magic) { $value = stripslashes_gpc_recursive($value); } $req->addQueryString($key, $value); } } } $req->addHeader('User-Agent', 'Geeklog/' . VERSION); // need to fake the referrer so the new token matches $req->addHeader('Referer', COM_getCurrentUrl()); foreach ($_COOKIE as $cookie => $value) { $req->addCookie($cookie, $value); } $response = $req->sendRequest(); if (PEAR::isError($response)) { if (!empty($files)) { SECINT_cleanupFiles($files); } trigger_error("Resending {$method} request failed: " . $response->getMessage()); } else { COM_output($req->getResponseBody()); } } else { if (!empty($files)) { SECINT_cleanupFiles($files); } echo COM_refresh($_CONF['site_url'] . '/index.php'); } // don't return exit; }