﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-socketref,再见！高德</title><link>http://www.cppblog.com/socketref/</link><description>https://github.com/adoggie</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 09:48:18 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 09:48:18 GMT</pubDate><ttl>60</ttl><item><title>TCE － 小型的RPC通信引擎库 介绍</title><link>http://www.cppblog.com/socketref/archive/2016/09/18/214280.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Sun, 18 Sep 2016 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2016/09/18/214280.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/214280.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2016/09/18/214280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/214280.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/214280.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 项目地址: http://github.com/adoggie/TCE  从12年的时候开始想做一个rpc的东东，这些年来陆陆续续往里面增加不同的功能、特点。<br>tce是一个 全栈的东西，并不是 protocalbuf，或者接近 thrift。 支持语言: csharp,python,java,objc,javascript,actionscript,c++,我想这些够了。 <br>&nbsp;&nbsp;<a href='http://www.cppblog.com/socketref/archive/2016/09/18/214280.html'>阅读全文</a><img src ="http://www.cppblog.com/socketref/aggbug/214280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2016-09-18 16:03 <a href="http://www.cppblog.com/socketref/archive/2016/09/18/214280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>真是无奈，前后几年陆续投腾讯阿里若干研发岗位</title><link>http://www.cppblog.com/socketref/archive/2016/08/23/214223.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Mon, 22 Aug 2016 20:09:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2016/08/23/214223.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/214223.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2016/08/23/214223.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/214223.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/214223.html</trackback:ping><description><![CDATA[干了17，8年一线技术工作，还不如刚毕业的985学生，真是好笑。
现在觉得也没啥多想的，现在乐于出去跟不同公司谈谈技术问题，面试完，基本也给对方上完一通技术课程。
晚上看一17岁小朋友在直播写带代码，满有意思，自己也想玩玩。
tce工程加入csharp支持中，本地代码差不多一半，lex分析还没开动，要抓紧了，早点能在unity上跑起来。
公司这两个月要搞个证照系统，设计完框架了，要写代码了。<img src ="http://www.cppblog.com/socketref/aggbug/214223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2016-08-23 04:09 <a href="http://www.cppblog.com/socketref/archive/2016/08/23/214223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有问题的c++通信代码的识别</title><link>http://www.cppblog.com/socketref/archive/2016/03/24/213106.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 24 Mar 2016 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2016/03/24/213106.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/213106.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2016/03/24/213106.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/213106.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/213106.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有问题的c++通信代码的识别，希望写c++的码农不要犯同样的错&nbsp;&nbsp;<a href='http://www.cppblog.com/socketref/archive/2016/03/24/213106.html'>阅读全文</a><img src ="http://www.cppblog.com/socketref/aggbug/213106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2016-03-24 15:29 <a href="http://www.cppblog.com/socketref/archive/2016/03/24/213106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微信开发环境的配置部署（PHP)</title><link>http://www.cppblog.com/socketref/archive/2016/03/24/213105.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Thu, 24 Mar 2016 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2016/03/24/213105.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/213105.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2016/03/24/213105.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/213105.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/213105.html</trackback:ping><description><![CDATA[近日获得一份微信营销系统的代码，看其功能比较丰富，便开始窥其代码的实现。为了将整个业务系统跑起来，还真的花了不少时间琢磨，幸好不负我的几十年功力，终于将运营环境和开发环境搭建成功，并将系统的授权代码全部剔除（软件厂商控制使用授权）。<br />准备条件：&nbsp;<br />1. 互联网服务器（必须开启80，443端口）<br />2. 申请域名，且绑定到服务器<br />3. 微信公众号申请，并通过微信认证（300人民币）<br />先上系统部署图 ：&nbsp;<br /><img src="http://www.cppblog.com/images/cppblog_com/socketref/微信php开发环境配置.jpg" border="0" alt="" /><br />几个部件需要介绍一下：&nbsp;<br />1. xampp ： &nbsp;开发php的套件，包含了apache，php，mysql，用起来很简单，不过我是部署在linux和mac 上，要留意的是文件目录访问权限的问题，mac下 所有的服务进程跑在root用户下；<br />2. phpstrom： 开发php的ide，出自jetbrains（我个人理解是目前开发工具最牛逼的公司）。 管理数据库推荐 DataGrip 软件。&nbsp;<br />3. xdebug ： 这个东西是php与phpstrom的调试接口 ，apche接收到http请求，转给php解释器，php解释器再phpStorm进行调试互动（建立xdebug的9000端口的tcp连接），开发者可以在phpStorm里面随意下断点。 注意： 在php.ini中需配置 ide-key:scott , 我是在nginx的转发头里面添加了 XDEBUG_SESSION=scott,令所有经过 nginx 服务器的http请求都被转到phpStorm中，否则无法实现代码断点。&nbsp;<br />4. wxDebuger： 这是微信提供的本地微信页面调试工具，开发这可以利用winre来调试手机上的页面，也可以脱离手机，直接调试微信页面（要调试微信的wxjssdk必须使用wxDebuger）。&nbsp;<br />5. nginx ： 在公网服务器部署nginx作为http服务器，接收各种用户请求，并将其转发到xampp。&nbsp;<br />6. vpn : &nbsp;这个是关键，为了实现本地开发调试的目的，我在公网服务器上部署了openvpn，并在mac开发机上部署了xampp，phpstorm等，并安装vpn客户端 Tunnelblick，其自动拨号到公网服务器，获得地址10.8.0.6，nginx将http请求转发到了我本地的开发机器上，这样我可以很方便的进行远程和本地调试了。&nbsp;<br /><br /><br />主要的功能描述：&nbsp;<br />1. 手机、浏览器、调试器 发起的http请求到达公网服务器，nginx通过vpn转发到本地开发机，开发者在phpstorm中断点调试代码，并将处理结果按原路返回。&nbsp;<br />2. 微信服务器的主要作用是获取 粉丝信息、oauth认证回调、服务器鉴权等功能 ， HTTP(302)是 oauth的灵魂 。&nbsp;<br />3. 这种配置架构很灵活的可以将开发模式切换到部署模式，只需要将xampp部署到公网服务器，并在 nginx的反向代理指到本地xampp服务即可。&nbsp;<br /><br /><br /><br />附录 &nbsp;nginx.conf&nbsp;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp;server&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;wx.xxxx.com&nbsp;www.xxxx.com;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-real-ip&nbsp;$remote_addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-Forwarded-For&nbsp;$proxy_add_x_forwarded_for;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;http:<span style="color: #008000; ">//</span><span style="color: #008000; ">10.8.0.6:8081;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Cookie&nbsp;"$http_cookie;XDEBUG_SESSION=scott";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Host&nbsp;$host;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-Forwarded-For&nbsp;$proxy_add_x_forwarded_for;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-real-ip&nbsp;$remote_addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><br /><br /><img src ="http://www.cppblog.com/socketref/aggbug/213105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2016-03-24 14:55 <a href="http://www.cppblog.com/socketref/archive/2016/03/24/213105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Centos6.x 如何安装PyBox2D,PyGame,以及升级Python2.7 (VirtualEvn)</title><link>http://www.cppblog.com/socketref/archive/2016/01/29/212754.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Fri, 29 Jan 2016 06:17:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2016/01/29/212754.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/212754.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2016/01/29/212754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/212754.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/212754.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 6.x 版本系统自带python 2.6，升级2.7的方式网上有很多版本，本人试用下来觉得诸多不便。<br>工作项目中越来越多的开发特性必须要求工作在py2.7版本中，例如：  django 1.7+已经不支持 py2.6.x了；  pyBox2d也不支持。<br>这次选择的最新版本 python 2.7.11 &nbsp;&nbsp;<a href='http://www.cppblog.com/socketref/archive/2016/01/29/212754.html'>阅读全文</a><img src ="http://www.cppblog.com/socketref/aggbug/212754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2016-01-29 14:17 <a href="http://www.cppblog.com/socketref/archive/2016/01/29/212754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>salesforce的oauth授权</title><link>http://www.cppblog.com/socketref/archive/2015/06/29/211090.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Mon, 29 Jun 2015 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2015/06/29/211090.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/211090.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2015/06/29/211090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/211090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/211090.html</trackback:ping><description><![CDATA[<br />访问sf，记录下一下代码<br /><br />（注册sf的app，登记 callback-url,执行sql查询）<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">#</span><span style="color: #008000; ">coding:utf-8</span><span style="color: #008000; "><br /></span><span style="color: #800080; ">__author__</span>&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">scott</span><span style="color: #800000; ">'</span><br /><span style="color: #0000FF; ">import</span>&nbsp;imp<br />imp.load_source(<span style="color: #800000; ">'</span><span style="color: #800000; ">init</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">../init_script.py</span><span style="color: #800000; ">'</span>)<br /><span style="color: #0000FF; ">import</span>&nbsp;urllib2,urllib,json,sys,os<br /><span style="color: #0000FF; ">import</span>&nbsp;traceback,threading,time,struct,os,os.path,shutil,distutils.dir_util,array,base64,zlib,struct,binascii<br /><span style="color: #0000FF; ">import</span>&nbsp;datetime<br /><span style="color: #0000FF; ">from</span>&nbsp;libs.python.lemon&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;webapi<span style="color: #008000; "><br /></span>callback&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">http://localhost:8002/oauth</span><span style="color: #800000; ">'</span><br />client_id&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">3MVG9ZL0ppGP5UrC_wQ8U02mOhowPKwjeaaLsWZ3BcYYVqiSsy1rL_D2h6qG.rGPnb_j6IcgLHPdhmvomzDFj</span><span style="color: #800000; ">'</span><br />client_secret&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">9046731979xxxxxxx</span><span style="color: #800000; ">'</span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;accessToken(request,code,state):<br />&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">https://login.salesforce.com/services/oauth2/token</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">grant_type</span><span style="color: #800000; ">'</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">authorization_code</span><span style="color: #800000; ">'</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>:code,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">client_id</span><span style="color: #800000; ">'</span>:client_id,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">client_secret</span><span style="color: #800000; ">'</span>:client_secret,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">redirect_uri</span><span style="color: #800000; ">'</span>:callback<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;<span style="color: #800000; ">''</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;urllib2.urlopen(url,urllib.urlencode(data)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traceback.print_exc()<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result.read()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;json.loads(&nbsp;result&nbsp;)<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;oauth(request):<br />&nbsp;&nbsp;&nbsp;&nbsp;cr&nbsp;=&nbsp;webapi.SuccCallReturn()<br />&nbsp;&nbsp;&nbsp;&nbsp;code&nbsp;=&nbsp;&nbsp;webapi.GET(request,<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">''</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;webapi.GET(request,<span style="color: #800000; ">'</span><span style="color: #800000; ">state</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">''</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;cr.result=[code,state]<br />&nbsp;&nbsp;&nbsp;&nbsp;token&nbsp;=&nbsp;accessToken(request,code,state)<br />&nbsp;&nbsp;&nbsp;&nbsp;cr.result.append(token)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;token<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlExecute(token[<span style="color: #800000; ">'</span><span style="color: #800000; ">access_token</span><span style="color: #800000; ">'</span>],token[<span style="color: #800000; ">'</span><span style="color: #800000; ">instance_url</span><span style="color: #800000; ">'</span>])<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traceback.print_exc()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cr.httpResponse()<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;cookielib<br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;-H&nbsp;"Authorization:&nbsp;OAuth&nbsp;token"&nbsp;-H&nbsp;"X-PrettyPrint:1"&nbsp;"</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">def</span>&nbsp;sqlExecute(token,url_host):<br />&nbsp;&nbsp;&nbsp;&nbsp;httpHandler&nbsp;=&nbsp;urllib2.HTTPHandler(debuglevel=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;httpsHandler&nbsp;=&nbsp;urllib2.HTTPSHandler(debuglevel=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;opener&nbsp;=&nbsp;urllib2.build_opener(httpHandler,&nbsp;httpsHandler)<br />&nbsp;&nbsp;&nbsp;&nbsp;urllib2.install_opener(opener)<br />&nbsp;&nbsp;&nbsp;&nbsp;sf_cmd_query=<span style="color: #800000; ">"</span><span style="color: #800000; ">%s/services/data/v20.0/query/?%s</span><span style="color: #800000; ">"</span>%(url_host,&nbsp;urllib.urlencode({<span style="color: #800000; ">'</span><span style="color: #800000; ">q</span><span style="color: #800000; ">'</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">select&nbsp;count()&nbsp;from&nbsp;account</span><span style="color: #800000; ">'</span>}))<br />&nbsp;&nbsp;&nbsp;&nbsp;headers&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">Authorization</span><span style="color: #800000; ">'</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">OAuth&nbsp;%s</span><span style="color: #800000; ">'</span>%token,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">X-PrettyPrint</span><span style="color: #800000; ">'</span>:1<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;httpReq&nbsp;=&nbsp;urllib2.Request(&nbsp;sf_cmd_query,headers=headers&nbsp;)<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;opener.open(httpReq).read()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;r<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br /><br />url1&nbsp;=&nbsp;<span style="color: #800000; ">"""</span><span style="color: #800000; ">https://login.salesforce.com/services/oauth2/authorize?response_type=code&amp;client_id=%s&amp;redirect_uri=%s&amp;state=first</span><span style="color: #800000; ">"""</span>%(client_id,callback)<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;launchBrowserForOAuth():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;webbrowser<br />&nbsp;&nbsp;&nbsp;&nbsp;webbrowser.open(url1)<br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">'</span>:<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;launchBrowserForOAuth()</div><img src ="http://www.cppblog.com/socketref/aggbug/211090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2015-06-29 20:21 <a href="http://www.cppblog.com/socketref/archive/2015/06/29/211090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python::简单数据对象到Object自动转换</title><link>http://www.cppblog.com/socketref/archive/2015/05/26/210748.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 26 May 2015 06:44:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2015/05/26/210748.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/210748.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2015/05/26/210748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/210748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/210748.html</trackback:ping><description><![CDATA[<br />python内部数据容器有dict和list两种 ，工作中最常用的方式是定义一些数据结构（数据即代码）,例如:&nbsp;<br /><span style="font-size: 13px; background-color: #eeeeee;"><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;frog={<span style="color: #800000; ">'</span><span style="color: #800000; ">name</span><span style="color: #800000; ">'</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">scott</span><span style="color: #800000; ">'</span>,<br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">age</span><span style="color: #800000; ">'</span>:2,<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">parts</span><span style="color: #800000; ">'</span>:{<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">eye</span><span style="color: #800000; ">'</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">green</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">leg</span><span style="color: #800000; ">'</span>:85<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">''</span>friend<span style="color: #800000; ">"</span><span style="color: #800000; ">:['moee','wee'],</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #800000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">hometown</span><span style="color: #800000; ">"</span>:<span style="color: #800000; ">'</span><span style="color: #800000; ">affica</span><span style="color: #800000; ">'</span><br /><span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />frog对象定义了小动物的某些属性，访问frog对象属性时，通过 dict,list的取值方法进行访问，例如: &nbsp;<br />print frog['name']<br />print frog['friend'][0] &nbsp;<br />有时觉得这种表达方式太原始了，需要改进，最好是以 '.'方式访问对象属性，例如: &nbsp;<br />print frog.name<br />代码来开始和结束吧， class _x&nbsp;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;_x:<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"""</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;从简单数据类型转换成python对象<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #800000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;_x({'name':'boob','body':{'color':'black'},'toys':[1,2,3,],'age':100})<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;p['toys'][1]<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;len(p.toys)<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;p.body.colors<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; ">"""</span><br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self,primitive):<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.data&nbsp;=&nbsp;primitive<br /><span style="color: #008080; ">12</span>&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__getattr__</span>(self,&nbsp;item):<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;self.data.get(item,None)<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;type(value)&nbsp;==&nbsp;dict:<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;_x(value)<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;value<br /><span style="color: #008080; ">18</span>&nbsp;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__len__</span>(self):<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;len(self.data)<br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__str__</span>(self):<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;str(self.data)<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__getitem__</span>(self,&nbsp;item):<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;None<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;type(self.data)&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;(list,tuple):<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;self.data[item]<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;type(value)&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;(dict,list,tuple):<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;_x(value)<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;type(self.data)&nbsp;==&nbsp;dict:<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;self.<span style="color: #800080; ">__getattr__</span>(item)<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;value</div><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/socketref/aggbug/210748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2015-05-26 14:44 <a href="http://www.cppblog.com/socketref/archive/2015/05/26/210748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>django部署 </title><link>http://www.cppblog.com/socketref/archive/2015/01/01/209371.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Wed, 31 Dec 2014 16:41:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2015/01/01/209371.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/209371.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2015/01/01/209371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/209371.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/209371.html</trackback:ping><description><![CDATA[相关技术: &nbsp;haproxy_keepalived_nginx_uwsgi_gevent_django&nbsp;<br /><br />之前部署django一直采用 apache + mod_wsgi，用得倒也没啥问题，看到越来越多的人采用nginx部署，所以也尝试了一下，结果很让人欣喜。<br /><br />nginx够小够简洁，编译、配置相当简单，但要知道她仅仅是个静态webserver，动态功能需要搭配相应的cgi来实现；&nbsp;<br />uwsgi是个啥东西，看其官方文档还真写的相当详细，功能很丰富，但我的需求可能只会使用其30%的功能；<br />uwsgi可以认为是python代码运行的loader，或者是容器（container），这有点像java的container（resin，tomcat）。看了其配置文档，很是惊喜，其不仅可以配置为多进程+多线程模式，也可以配置为单进程+多线程模式，并能保持高并发高销率，非常感兴趣。<br />一直以来自己总在寻找一种 高效、灵活的django的应用容器。<br />apache默认都是多进程模式，http又是无状态的，不同的请求被分派到不同的进程处理，request处理都是隔离的。多进程带来的问题是高昂的系统开销（apache也支持多线程处理）。<br />这种隔离又带来了诸多不便，request之间不能共享状态、数据和协作，不能很好的完成与外部系统的协同工作（例如request共享同一个服务器的socket连接或者访问控制某个rs232端口）<br />所以很想有种类似java的应用容器这样的东东。&nbsp;<br />接触了gevent，其核心是io异步分派，单线程模拟多协程来对应用层多任务的支持，几近疯狂io效率得到了我的认可。ps：八过smp系统就应该启动多个gevent服务，不然其他核心数都浪费了。<br />采用gevent+django的模式搭建了自己得app容器，也跑了几个项目，总体效果还是可以。<br />nginx+uwsgi+django 的配合开始应用到新项目中<br /><img src ="http://www.cppblog.com/socketref/aggbug/209371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2015-01-01 00:41 <a href="http://www.cppblog.com/socketref/archive/2015/01/01/209371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>交通违章查询自动化</title><link>http://www.cppblog.com/socketref/archive/2014/10/08/208511.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 07 Oct 2014 16:45:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2014/10/08/208511.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/208511.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2014/10/08/208511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/208511.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/208511.html</trackback:ping><description><![CDATA[<br />上海交通违章查询网站：&nbsp;http://www.shjtaq.com/Server1/dzjc_new.asp<br /><div>验证码图片获取地址： http://www.shjtaq.com/Server1/validatecode.asp?m=2304.046<br /><br />服务器通过页面请求的session-id来区分之后提交的验证码。 第一次请求查询页面时，服务器将访问session(cookie)传到客户端,之后的查询和验证码获取时客户端携带之前的cookie传送到服务器，服务器端保存着当前 session-id与验证码 的对应关系。&nbsp;<br /><br />查询返回记录可通过 xpath或者 beautifulsoup进行解析<br /><br />程序使用python完成，也是个简单的小爬虫，scrapy 之类的没必要使用了，gevent完成异步通信。<br /><br />交通网的验证码生成还是比较简单，做自动识别可找几个简单的图形识别程序即可。<br />如若不行，则人工输入喽<br /></div><img src ="http://www.cppblog.com/socketref/aggbug/208511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2014-10-08 00:45 <a href="http://www.cppblog.com/socketref/archive/2014/10/08/208511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易迅商品抓取</title><link>http://www.cppblog.com/socketref/archive/2014/05/20/207028.html</link><dc:creator>放屁阿狗 </dc:creator><author>放屁阿狗 </author><pubDate>Tue, 20 May 2014 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/socketref/archive/2014/05/20/207028.html</guid><wfw:comment>http://www.cppblog.com/socketref/comments/207028.html</wfw:comment><comments>http://www.cppblog.com/socketref/archive/2014/05/20/207028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/socketref/comments/commentRss/207028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/socketref/services/trackbacks/207028.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/socketref/archive/2014/05/20/207028.html'>阅读全文</a><img src ="http://www.cppblog.com/socketref/aggbug/207028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/socketref/" target="_blank">放屁阿狗 </a> 2014-05-20 11:33 <a href="http://www.cppblog.com/socketref/archive/2014/05/20/207028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>