公交余额查询(深圳通)

49 篇文章 1 订阅

关于公交余额查询

现在有一些公交卡支持网余额查询了,虽然支持的不多,但是不得不说,深圳通的余额还是很好查的。因为是匿名的公交卡,所以输入用户名、身份证之类的事没用的,需要输入的只是公交卡的号码即可。

深圳通的余额查询网站是:深圳通网上查询,输入号码即可查询出卡的余额信息等,如下所示:


还是很简单的,没有万恶的广告、没有万恶的验证码!!

这篇文章讲得是如何根据这个网页编写自己的程序实现公交卡的余额查询的。方法是:C++的Curl库+WireShark


获取验证查询余额的API接口

像现在好多类似的公开API一样,我们可以通过API请求的方式获取公交卡的余额信息,那么这个查询余额的API接口是什么呢?

好吧,网站不是我写的,对网页也几乎是一窍不通,可是我会一丢丢的WireShark,拿这个工具抓取试试。

因为查询公交卡余额的时候需要输入公交卡号,所以,可以通过过滤Http关键字内容来获取我们所需要的数据包。好了,打开WireShark,启动抓包监听,然后输入过滤条件,最后在浏览器里面查一个卡号试试。查询条件是

http contains "294798454"
表示过滤出包含294798454的Http包,查询结果如下所示:


查询后发现WireShark抓取到了两个数据包(其实一个是请求包,一个是应答包),可以从上面的包内容看出,API的请求方式是POST,为了看得更相信一点,可以Fllow Tcp Stream进去看看,结果如下所示:(红色的表示请求内容,蓝色的表示应答内容)



可以上图中看出收集一些数据:POST,cardno=294798458,http://query.shenzhentong.com:8080/sztnet/qryCard.do等,于是不妨猜猜API接口!API接口中肯定是要包括公交卡号的,所以cardno=294798458是有用的,同时我们可以发现往常参数是在链接后面使用如下方式传参的

http://write.blog.csdn.net/postedit?ref=toolbar
通过?+参数,所以不妨猜一下API接口是
http://query.shenzhentong.com:8080/sztnet/qryCard.do?cardno=294798458
要验证我们的猜想是否正确,可以直接把该地址输入到浏览器试试即可。

事实上,我们所需要的API接口正好是上述的地址+卡号的方式。到此,我们可以知道深圳通的余额查询API接口了,下面需要编程来查询了,使用到的事curl库,还是很简单的。


使用curl编程查询深圳通余额

这个很简单,使用C++开源库之Curl这里封装的Post即可,代码如下:

// 深圳通查询
void BusPassCheckShenZhen( const string& strCardNo, vector<string>& result )
{
	CHttpClient http;
	string strResult;
	char  szValue[128] = "cardno=";

	// 查询余额信息
	strcat_s(szValue, sizeof(szValue), strCardNo.c_str());
	http.Post("http://query.shenzhentong.com:8080/sztnet/qryCard.do", szValue, strResult);
	
	// 从查询结果的网页中解析出余额信息
	if(strstr(strResult.c_str(), "不合法") == NULL)
	{
		const char* pStart = strstr(strResult.c_str(), "class='tableact'");
		const char* pEnd = strstr(pStart, "</table>");

		const char* psd = NULL;

		for( pStart = strstr(pStart, "<td"); pStart && pStart < pEnd ; pStart = strstr(pStart, "<td"))
		{
			memset(szValue, 0, sizeof(szValue));
			pStart = strstr(pStart, ">");
			psd = strstr(pStart, "</td>");
			memcpy(szValue, pStart+1, psd-pStart-1);
			result.push_back(szValue);
		}
	}
	else
	{
		result.push_back("查询条件不合法!");
	}
}

关于其他公交卡

上述公交卡余额查询还是很简单的,一下就找到了API接口了。但是其他的就不容易了,我试了试北京的,不但要验证码,而且找到后输入链接居然说没权限,我只能说我太年轻了!!!还有其他的,甚至都不支持网上余额查询的~

找了几个大城市的,目前我只找到了深圳和上海的API接口,其他的要么是没有查询功能,要么就是我没去试,要么丫的我找不到!

附上上海的查询代码:

void BusPassCheckShanghai( const string& strCardNo, vector<string>& result )
{
	CHttpClient http;
	string strResult;
	char  szValue[258] = {0};

	sprintf_s(szValue, sizeof(szValue), "http://220.248.75.36/handapp/PGcardAmtServlet?arg1=%s&callback=jQuery18307201102350372821_1422865576701&_=1422865584833", strCardNo.c_str());
	http.Get(szValue, strResult);

	result.push_back("余额:");

	const char* ps = strstr(strResult.c_str(), "'");
	const char* pe = strstr(ps+1, "'");
	memset(szValue, 0, sizeof(szValue));
	memcpy(szValue, ps+1, pe-ps-1);
	result.push_back(szValue);

}

话费余额查询api源码是一个用于查询用户手机话费余额的接口程序。源码常由一系列的代码组成,主要包括接收用户查询请求、向运营商服务器发送请求、接收服务器返回的查询结果以及将查询结果返回给用户等功能。 首先,源码需要包含用户发送查询请求的接口,常是过HTTP请求来实现,可以使用GET或POST方法。接口程序需要能够正确解析用户发送的请求参数,包括手机号码、运营商类型等信息。 其次,源码需要包含向运营商服务器发送查询请求的功能。这部分代码常使用HTTP请求库来实现,根据运营商提供的查询接口文档,构造查询请求,发送给运营商服务器,并处理返回的结果。 接着,源码需要对从运营商服务器返回的查询结果进行处理,常是解析JSON或XML格式的数据,提取用户的话费余额信息。 最后,源码需要将查询结果返回给用户,常是以JSON或XML格式封装用户的话费余额信息,过HTTP响应返回给用户。 整个源码需要考虑到用户输入的合法性和安全性,对用户请求进行验证和过滤,防止恶意请求。同时,还需要考虑到运营商服务器的稳定性和响应时间,尽量优化查询请求,提高用户体验。 总之,话费余额查询api源码包括了用户请求接口、与运营商服务器信、处理返回数据以及向用户返回结果等功能,是一个涵盖多方面技术的接口程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值