存档
httpclient连接超时设置
/* 从连接池中取连接的超时时间 */
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);
}
}
PHP数组适用unset删除重建索引
1.unset删除元素后不会重建数组的索引。
array_values()可以实现索引重建
阅读全文...
google c/c++编程风格总结
先阐述几个概念:
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、不要使用匈牙利命名法。
zxing二维码条码扫描横屏landscape转竖屏portrait
zxing包默认是横屏扫描一维条码,用户体验上不是很方便需要换手翻转手机。
这两天查了查相关资料,解决方法如下:
阅读全文...
ThinkPHP表单令牌验证功能,表单令牌错误
用thinkphp编写的带有form表单的页面,如果你打开两次同一个表单,以第一次找开的提交信息,他就会提示你“表单令牌错误”的信息!
解决办法:
阅读全文...
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获取操作系统和浏览器信息
//以下代码实现从客户端获取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 输出汉字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转码工作,等有机会我再细分析下。
yahoo finance API f参数对照表
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获取用户真实ip地址代码
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";
}

