存档

‘编程’ 分类的存档

httpclient连接超时设置

2012 年 1 月 27 日 没有评论

/* 从连接池中取连接的超时时间 */
ConnManagerParams.setTimeout(params, 1000);
/* 连接超时 */
HttpConnectionParams.setConnectionTimeout(params, 2000);
/* 请求超时 */
HttpConnectionParams.setSoTimeout(params, 4000);

第一行设置ConnectionPoolTimeout:这定义了从ConnectionManager管理的连接池中取出连接的超时时间,此处设置为1秒。
第二行设置ConnectionTimeout:这定义了通过网络与服务器建立连接的超时时间。Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间,此处设置为2秒。
第三行设置SocketTimeout:这定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间,此处设置为4秒。
以上3种超时分别会抛出ConnectionPoolTimeoutException,ConnectionTimeoutException与SocketTimeoutException。

 

httpclient post方法封装

public static String post(String url, NameValuePair... params) {
try {
// 编码参数
List<NameValuePair> formparams = new ArrayList<NameValuePair>(); // 请求参数
for (NameValuePair p : params) {
formparams.add(p);
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,
CHARSET);
// 创建POST请求
HttpPost request = new HttpPost(url);
request.setEntity(entity);
// 发送请求
HttpClient client = getHttpClient();
HttpResponse response = client.execute(request);
if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
throw new RuntimeException("请求失败");
}
HttpEntity resEntity =  response.getEntity();
return (resEntity == null) ? null : EntityUtils.toString(resEntity, CHARSET);
} catch (UnsupportedEncodingException e) {
Log.w(TAG, e.getMessage());
return null;
} catch (ClientProtocolException e) {
Log.w(TAG, e.getMessage());
return null;
} catch (IOException e) {
throw new RuntimeException("连接失败", e);
}

}

分类: andoird, java 标签: ,

PHP数组适用unset删除重建索引

2012 年 1 月 24 日 没有评论

1.unset删除元素后不会重建数组的索引。

array_values()可以实现索引重建
阅读全文...

分类: PHP 标签:

google c/c++编程风格总结

2011 年 12 月 27 日 没有评论

先阐述几个概念:

  Pascal Case :当标识符由两个或者两个以上单词组成的时候,单词之间不加其他的符号,并且每个单词首字母都必须大写,例如PascalCase。

  camel Case: 当标识符由两个或者两个以上单词组成的时候,单词间不加其他的符号,并且第一个单词以小写开头,其他单词以大写开头。例如camelCase。

  Unix/Linux变量命名方法:当程序由两个或两个以上单词组成的时候,单词都以小写开头,并且以_连接。 

  下面是Google C++编程规范的一些内容:

  一、命名

    1)普通变量:linux命名规范 。例如:string table_name;

    2)常量: k+PascalCase。例如 const int kDayInAWeek = 7;

    3)类私有成员: linux命名规范+_。 例如:int parament_count_;

    4)普通函数命名:PascalCase。例如:AddTableEntry()。

    5)存储函数:linux命名方法。例如:

       int num_entries() const {return num_entries_};

       void set_num_entries(){int num_entries};

    6)枚举:值为全大写组成的单词,单词以_分割。例如MY_ENUM_VALUE

    7)类名、结构名:PascalCase

  二、函数参数

    输入参数在钱,输出参数在后。

  三、头文件排序

    C系统头文件

    C++系统头文件

    其他库头文件

    本项目内头文件

  四、文件注释

    1、创建时间  作者

    2、修改时间  修改人   修改函数列表

    3、头文件中,首先生命该类的作用,对函数的用法作简单说明

  五、其他约定

    1、每行不要超过80个字符,包含长路径或者头文件保护的情况除外;

    2、设定编辑器将tab转换为空格,最好为4个空格;

    3、空循环体使用{}、continue,而不是一个分号;

    4、不要使用匈牙利命名法。

分类: c++ 标签:

zxing二维码条码扫描横屏landscape转竖屏portrait

2011 年 12 月 22 日 没有评论

zxing包默认是横屏扫描一维条码,用户体验上不是很方便需要换手翻转手机。

这两天查了查相关资料,解决方法如下:
阅读全文...

分类: andoird, java 标签: , , ,

ThinkPHP表单令牌验证功能,表单令牌错误

2011 年 11 月 28 日 没有评论

用thinkphp编写的带有form表单的页面,如果你打开两次同一个表单,以第一次找开的提交信息,他就会提示你“表单令牌错误”的信息!

解决办法:
阅读全文...

分类: PHP 标签:

PHP如何处理jquery post过来的$('#form').serialize()数据

如果你使用jquery的form表单中serialize提交数据到后台,例如:$('#form').serialize()。在php处理端你不用任何处理,跟普通的from提交一样,使用$_GET[‘varname’]或$_POST[‘varname’]就能取到数据。

 

jquery里form的serialize实际是只是把表单中的数据组装成"varname=val&var2=val2"这种样子,看到这个你应该知道PHP端不需要处理了吧。

分类: PHP 标签: ,

PHP获取操作系统和浏览器信息

2011 年 11 月 26 日 没有评论
 //以下代码实现从客户端获取IP,操作系统,浏览器的信息
class clientGetObj //类
{
 function getBrowse() //取浏览器版本函数
 {
  global $_SERVER;

  if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 8.0"))
  return "Internet Explorer 8.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 7.0"))
  return "Internet Explorer 7.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 6.0"))
  return "Internet Explorer 6.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/3"))
  return "Firefox 3";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/2"))
  return "Firefox 2";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Chrome"))
  return "Google Chrome";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Safari"))
  return "Safari";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Opera"))
  return "Opera";
  else return "未知";

 }
 function getIP () //取IP函数
 {
  global $_SERVER;
  if (getenv('HTTP_CLIENT_IP')) {
   $ip = getenv('HTTP_CLIENT_IP');
  } else if (getenv('HTTP_X_FORWARDED_FOR')) {
   $ip = getenv('HTTP_X_FORWARDED_FOR');
  } else if (getenv('REMOTE_ADDR')) {
   $ip = getenv('REMOTE_ADDR');
  } else {
   $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
 }

 function getOS () //取操作系统类型函数
 {
  global $_SERVER;
  $agent = $_SERVER['HTTP_USER_AGENT'];
  $os = false;
  if (eregi('win', $agent) && strpos($agent, '95')){
   $os = 'Windows 95';
  }
  else if (eregi('win 9x', $agent) && strpos($agent, '4.90')){
   $os = 'Windows ME';
  }
  else if (eregi('win', $agent) && ereg('98', $agent)){
   $os = 'Windows 98';
  }
  else if (eregi('win', $agent) && eregi('nt 5.1', $agent)){
   $os = 'Windows XP';
  }
  else if (eregi('win', $agent) && eregi('nt 5', $agent)){
   $os = 'Windows 2000';
  }
  else if (eregi('win', $agent) && eregi('nt', $agent)){
   $os = 'Windows NT';
  }
  else if (eregi('win', $agent) && ereg('32', $agent)){
   $os = 'Windows 32';
  }
  else if (eregi('linux', $agent)){
   $os = 'Linux';
  }
  else if (eregi('unix', $agent)){
   $os = 'Unix';
  }
  else if (eregi('sun', $agent) && eregi('os', $agent)){
   $os = 'SunOS';
  }
  else if (eregi('ibm', $agent) && eregi('os', $agent)){
   $os = 'IBM OS/2';
  }
  else if (eregi('Mac', $agent) && eregi('PC', $agent)){
   $os = 'Macintosh';
  }
  else if (eregi('PowerPC', $agent)){
   $os = 'PowerPC';
  }
  else if (eregi('AIX', $agent)){
   $os = 'AIX';
  }
  else if (eregi('HPUX', $agent)){
   $os = 'HPUX';
  }
  else if (eregi('NetBSD', $agent)){
   $os = 'NetBSD';
  }
  else if (eregi('BSD', $agent)){
   $os = 'BSD';
  }
  else if (ereg('OSF1', $agent)){
   $os = 'OSF1';
  }
  else if (ereg('IRIX', $agent)){
   $os = 'IRIX';
  }
  else if (eregi('FreeBSD', $agent)){
   $os = 'FreeBSD';
  }
  else if (eregi('teleport', $agent)){
   $os = 'teleport';
  }
  else if (eregi('flashget', $agent)){
   $os = 'flashget';
  }
  else if (eregi('webzip', $agent)){
   $os = 'webzip';
  }
  else if (eregi('offline', $agent)){
   $os = 'offline';
  }
  else {
   $os = 'Unknown';
  }
  return $os;
 }
}
分类: PHP 标签:

php 输出汉字png GD显示中文

php输出图片可以适用GD组件来进行。

输出英文字母使用 imagestring — 水平地画一行字符串。

<?php
// 建立一幅 100X30 的图像
$im = imagecreate(100, 30);

// 白色背景和蓝色文本
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// 把字符串写在图像左上角
imagestring($im, 5, 0, 0, "Hello world! ", $textcolor);

// 输出图像
header("Content-type: image/png");
imagepng($im);
?>

输出中文的时候就不行了,下面的代码就只能输出英文。

<?php
// 建立一幅 100X30 的图像
$im = imagecreate(100, 30);

// 白色背景和蓝色文本
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// 把字符串写在图像左上角
imagestring($im, 5, 0, 0, "Hello world! 你好", $textcolor);

// 输出图像
header("Content-type: image/png");
imagepng($im);
?>

 

翻了下PHP手册,有时候手册是很强大的,就好比闲来无事翻字典,你会多认识好多字一样。

imagettftext — 用 TrueType 字体向图像写入文本,可以先导入中文字体在输出。

<?php
// Set the content-type
header("Content-type: image/png");

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...测试';
// Replace path by your own font path
$font = 'yh.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

效果

 

但要保证php文件是以utf8格式保存的,不然会输出如下乱码,

本函数同时需要 GD 库和  FreeType 库。

原因应该是内部进行了utf8和gbk转码工作,等有机会我再细分析下。

分类: PHP 标签: ,

yahoo finance API f参数对照表

2011 年 11 月 25 日 没有评论

1、通过API获取实时数据

请求地址

http://finance.yahoo.com/d/quotes.csv?s=<股票名称>&f=<数据列选项>

参数

  • s – 表示股票名称,多个股票之间使用英文加号分隔,如”XOM+BBDb.TO+JNJ+MSFT”,罗列了四个公司的股票:XOM, BBDb.TO, JNJ, MSFT。
  • f – 表示返回数据列,如”snd1l1yr”。更详细的参见下表

例如 汇率API

http://download.finance.yahoo.com/d/quotes.html?s=USDCNY=X&f=sl1d1t1ba&e=.html

2、通过API获取历史数据

请求地址

http://ichart.yahoo.com/table.csv?s=<string>&a=<int>&b=<int>&c=<int>&d=<int>&e=<int>&f=<int>&g=d&ignore=.csv

参数

  • s – 股票名称
  • a – 起始时间,月
  • b – 起始时间,日
  • c – 起始时间,年
  • d – 结束时间,月
  • e – 结束时间,日
  • f – 结束时间,年
  • g – 时间周期。Example: g=w, 表示周期是’周’。d->’日’(day), w->’周’(week),m->’月’(mouth),v->’dividends only’

一定注意月份参数,其值比真实数据-1。如需要9月数据,则写为08。

3、通过API获取深沪股票数据

雅虎的API是国际性的,支持查询国内沪深股市的数据,但代码稍微变动一下,如浦发银行的代号是:600000.SS。规则是:上海市场末尾加.ss,深圳市场末尾加.sz

a Ask a2 Average Daily Volume a5 Ask Size
b Bid b2 Ask (Real-time) b3 Bid (Real-time)
b4 Book Value b6 Bid Size c Change & Percent Change
c1 Change c3 Commission c6 Change (Real-time)
c8 After Hours Change (Real-time) d Dividend/Share d1 Last Trade Date
d2 Trade Date e Earnings/Share e1 Error Indication (returned for symbol changed / invalid)
e7 EPS Estimate Current Year e8 EPS Estimate Next Year e9 EPS Estimate Next Quarter
f6 Float Shares g Day’s Low h Day’s High
j 52-week Low k 52-week High g1 Holdings Gain Percent
g3 Annualized Gain g4 Holdings Gain g5 Holdings Gain Percent (Real-time)
g6 Holdings Gain (Real-time) i More Info i5 Order Book (Real-time)
j1 Market Capitalization j3 Market Cap (Real-time) j4 EBITDA
j5 Change From 52-week Low j6 Percent Change From 52-week Low k1 Last Trade (Real-time) With Time
k2 Change Percent (Real-time) k3 Last Trade Size k4 Change From 52-week High
k5 Percebt Change From 52-week High l Last Trade (With Time) l1 Last Trade (Price Only)
l2 High Limit l3 Low Limit m Day’s Range
m2 Day’s Range (Real-time) m3 50-day Moving Average m4 200-day Moving Average
m5 Change From 200-day Moving Average m6 Percent Change From 200-day Moving Average m7 Change From 50-day Moving Average
m8 Percent Change From 50-day Moving Average n Name n4 Notes
o Open p Previous Close p1 Price Paid
p2 Change in Percent p5 Price/Sales p6 Price/Book
q Ex-Dividend Date r P/E Ratio r1 Dividend Pay Date
r2 P/E Ratio (Real-time) r5 PEG Ratio r6 Price/EPS Estimate Current Year
r7 Price/EPS Estimate Next Year s Symbol s1 Shares Owned
s7 Short Ratio t1 Last Trade Time t6 Trade Links
t7 Ticker Trend t8 1 yr Target Price v Volume
v1 Holdings Value v7 Holdings Value (Real-time) w 52-week Range
w1 Day’s Value Change w4 Day’s Value Change (Real-time) x Stock Exchange
y Dividend Yield
分类: PHP 标签: ,

PHP获取用户真实ip地址代码

if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$proxy = $_SERVER["HTTP_CLIENT_IP"];
} else {
$proxy = $_SERVER["REMOTE_ADDR"];
}
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
}
echo "Your IP $ip";
if (isset($proxy)) {
echo "Your proxy IP is $proxy";
}
如果使用cdn或者squid代理 REMOTE获到的ip就是squid或cdn的ip
分类: PHP 标签: