本文整理汇总了PHP中HTTP_Request::attach方法的典型用法代码示例。如果您正苦于以下问题:PHP HTTP_Request::attach方法的具体用法?PHP HTTP_Request::attach怎么用?PHP HTTP_Request::attach使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HTTP_Request
的用法示例。
在下文中一共展示了HTTP_Request::attach方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getHttpResponse
/**
* Return array contains the response of the given URL.
* array[code] => HTTP status code
* array[headers] => HTTP headers
* array[headers] => Entity body
* Throw exception if error.
*
* @param string $url
* @param array $headers
* @param array $post
* @return array
*/
private function getHttpResponse($url, $headers = array(), $post = array())
{
$url = str_replace('&', '&', trim($url));
$req = new HTTP_Request($url, array('allowRedirects' => true, 'maxRedirects' => 5));
/*
* @see HTTP_Request_Listener_Extended
*/
$listener = new HTTP_Request_Listener_Extended();
$req->attach($listener);
if (!isset($headers['user-agent'])) {
$headers['user-agent'] = $this->httpUserAgent;
}
foreach ($headers as $key => $value) {
if (!empty($value)) {
$req->addHeader($key, $value);
}
}
if (!empty($post)) {
$req->setMethod('POST');
foreach ($post as $key => $value) {
$req->addPostData($key, $value);
}
}
$result = $req->sendRequest();
$is_error = false;
if (PEAR::isError($result)) {
$is_error = true;
$error_message = $result->getMessage();
/*
* $error_message could be empty if the error was raised
* when fsockopen() returns false in Net_Socket::connect()
*/
if (empty($error_message)) {
$error_message = "Failed connecting to the server.";
/*
* HTTP_Request raises 'Malformed response' error
* if request path is empty (e.g. http://www.example.com).
* This bug still exists in its automatic redirection mechanism
* in CVS rev. 1.55 (latest as of May 18, 2007).
*/
} elseif ($error_message == 'Malformed response.') {
$url = $req->getURL(null);
if (false !== ($urls = @parse_url($url)) and !isset($urls['path'])) {
$req->setURL($url);
$result = $req->sendRequest();
if (PEAR::isError($result)) {
$error_message = $result->getMessage();
if (empty($error_message)) {
$error_message = "Failed connecting to the server.";
}
} else {
$is_error = false;
}
}
}
}
if ($is_error) {
throw new Exception($error_message);
}
return array('url' => $req->getUrl(null), 'code' => $req->getResponseCode(), 'headers' => $req->getResponseHeader(), 'body' => $req->getResponseBody());
}
示例2: foreach
function download_incomplete_files($tmp_dir)
{
foreach ($this->to_download as $dl) {
// work out the url and final path
$output_fn = $dl['full_path'] . '.r' . $this->target_revision;
$url = $this->url_join($this->state->get_repository_root(), $dl['href']);
$this->out("Downloading {$url} to {$output_fn}");
// make sure the file isn't already there
if (file_exists($output_fn) && md5_file($output_fn) == $dl['checksum']) {
$this->out("Looks like we've already got it - good!");
continue;
}
// looks like we'll have to download the file. see if we
// can write to the target location...
if (!$this->can_write_to($output_fn)) {
throw new Subversion_Failure("I don't have permission to write to {$output_fn}. <br/>Try: <code>chmod 777 " . basename($output_fn) . "</code>");
}
// likewise for the temp file
$tmp_fn = tempnam($tmp_dir, "svn.download.tmp");
$this->out("(using {$tmp_fn} as a temporary filename)");
// and do the download
$req = new HTTP_Request($url);
$f = fopen($tmp_fn, "wb");
if (!$f) {
throw new Subversion_Failure("Unable to open file {$tmp_fn}");
}
$req->attach(new Subversion_FileListener($f));
$req->sendRequest(FALSE);
fclose($f);
clearstatcache();
// got it! check checksum
if (md5_file($tmp_fn) != $dl['checksum']) {
throw new Subversion_Failure("checksum of downloaded file {$url} does not match checksum in xml");
}
// and move it to the final location
if (!rename($tmp_fn, $output_fn)) {
unlink($tmp_fn);
throw new Subversion_Failure("Unable to save downloaded file as {$output_fn}");
}
}
}