<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>程序开发</title>
		<link>http://neeao.com/category/develop/</link>
		<description>信息安全、程序开发、脚本技术</description>
		<copyright>Powered by SaBlog-X. Copyright (C) 2003-2009.</copyright>
		<generator>SaBlog-X Version 2.0 Build 20100301</generator>
		<lastBuildDate>Sat, 04 Feb 2012 21:29:16 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://neeao.com/archives/14/</guid>
			<title>Asp词法分析C#版</title>
			<author>Neeao</author>
			<description><![CDATA[Neeao's Blog ( http://neeao.com/ ) : <p>代码提取自OWASP SWAAT项目，会对asp标记（&lt;%%&gt;）内的代码进行词法分析，主要针对中文解析部分做了补充，暂时只支持utf-8中文的解析，如果非utf-8中文编码可能会导致乱码。</p>
<p>至于这个东东能做干嘛，爱干嘛干嘛。</p>
<p>代码解析效果如下：</p>
<p>源码：</p>
<pre><ol class="dp-vb"><li class="alt"><span><span>&lt;%&nbsp;</span></span></li><li><span>if&nbsp;request(<span class="string">&quot;keywords&quot;</span><span>)&lt;&gt;</span><span class="string">&quot;&quot;</span><span>&nbsp;then&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;str(clng(request(<span class="string">&quot;keywords&quot;</span><span>)))&amp;</span><span class="string">&quot;中文&quot;</span><span>&nbsp;</span></span></li><li><span>end&nbsp;<span class="keyword">If</span><span>&nbsp;</span></span></li><li class="alt"><span><span class="keyword">Function</span><span>&nbsp;str(str)&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;str=str&nbsp;</span></li><li class="alt"><span><span class="keyword">End</span><span>&nbsp;</span><span class="keyword">Function</span><span>&nbsp;&nbsp;</span></span></li><li><span>%&gt;&nbsp;</span></li></ol></pre>
<p>解析后的输出：</p>
<pre><ol class="dp-vb"><li class="alt"><span><span>Token&nbsp;#Label:&nbsp;if&nbsp;</span></span></li><li><span>Token&nbsp;#Label:&nbsp;request&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Delim:&nbsp;(&nbsp;</span></li><li><span>Token&nbsp;#<span class="keyword">String</span><span>:&nbsp;keywords&nbsp;</span></span></li><li class="alt"><span>Token&nbsp;#Delim:&nbsp;)&nbsp;</span></li><li><span>Token&nbsp;#Operator:&nbsp;&lt;&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Operator:&nbsp;&gt;&nbsp;</span></li><li><span>Token&nbsp;#<span class="keyword">String</span><span>:&nbsp;&nbsp;</span></span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;then&nbsp;</span></li><li><span>Token&nbsp;#Label:&nbsp;response.write&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;str&nbsp;</span></li><li><span>Token&nbsp;#Delim:&nbsp;(&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;clng&nbsp;</span></li><li><span>Token&nbsp;#Delim:&nbsp;(&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;request&nbsp;</span></li><li><span>Token&nbsp;#Delim:&nbsp;(&nbsp;</span></li><li class="alt"><span>Token&nbsp;#<span class="keyword">String</span><span>:&nbsp;keywords&nbsp;</span></span></li><li><span>Token&nbsp;#Delim:&nbsp;)&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Delim:&nbsp;)&nbsp;</span></li><li><span>Token&nbsp;#Delim:&nbsp;)&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Operator:&nbsp;&amp;&nbsp;</span></li><li><span>Token&nbsp;#<span class="keyword">String</span><span>:&nbsp;中文&nbsp;</span></span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;end&nbsp;</span></li><li><span>Token&nbsp;#Keyword:&nbsp;<span class="keyword">If</span><span>&nbsp;</span></span></li><li class="alt"><span>Token&nbsp;#Label:&nbsp;<span class="keyword">Function</span><span>&nbsp;</span></span></li><li><span>Token&nbsp;#Label:&nbsp;str&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Delim:&nbsp;(&nbsp;</span></li><li><span>Token&nbsp;#Label:&nbsp;str&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Delim:&nbsp;)&nbsp;</span></li><li><span>Token&nbsp;#Label:&nbsp;str&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Operator:&nbsp;=&nbsp;</span></li><li><span>Token&nbsp;#Label:&nbsp;str&nbsp;</span></li><li class="alt"><span>Token&nbsp;#Keyword:&nbsp;<span class="keyword">End</span><span>&nbsp;</span></span></li><li><span>Token&nbsp;#Label:&nbsp;<span class="keyword">Function</span><span>&nbsp;</span></span></li></ol></pre>
<p>有些解析还不是太准确，比如function,应该是keyword的，这里被解析成了label。</p>
<p>代码如下：</p>
<p><a href="/attachments/asp_lex.rar">asp_lex.rar</a></p>]]></description>
			<link>http://neeao.com/archives/14/</link>
			<category domain="http://neeao.com/category/develop/">程序开发</category>
			<pubDate>2009-09-23 12:19</pubDate>
		</item>
		<item>
			<guid>http://neeao.com/archives/13/</guid>
			<title>Python批量修改文件后缀脚本</title>
			<author>Neeao</author>
			<description><![CDATA[Neeao's Blog ( http://neeao.com/ ) : <p>批量修改文件后缀名：</p>
<p>使用方法：s_rename(路径,原后缀,新后缀)</p>
<pre><ol class="dp-py"><li class="alt"><span><span class="comment">#coding:gbk</span><span>&nbsp;</span></span></li><li><span><span class="comment">#code&nbsp;By&nbsp;Neeao</span><span>&nbsp;</span></span></li><li class="alt"><span><span class="comment">#2009-09-15</span><span>&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;os,string&nbsp;</span></span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span><span class="keyword">def</span><span>&nbsp;s_rename(path,old_ext,new_ext):&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(path,&nbsp;dirs,&nbsp;files)&nbsp;</span><span class="keyword">in</span><span>&nbsp;os.walk(path):&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;filename&nbsp;</span><span class="keyword">in</span><span>&nbsp;files:&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext=os.path.splitext(filename)[<span class="number">1</span><span>]&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(cmp(ext,old_ext)==</span><span class="number">0</span><span>):&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newname=filename.replace(old_ext,new_ext)&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldpath=path+<span class="string">&quot;\\&quot;</span><span>+filename&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newpath=path+<span class="string">&quot;\\&quot;</span><span>+newname&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;</span><span class="string">&quot;oldpath:&quot;</span><span>+oldpath+&quot;&quot;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;</span><span class="string">&quot;newpth:&quot;</span><span>+newpath+&quot;&quot;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>:&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.rename(oldpath,&nbsp;newpath)&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">except</span><span>&nbsp;ValueError:&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;</span><span class="string">&quot;Error&nbsp;when&nbsp;rename&nbsp;the&nbsp;file&nbsp;&quot;</span><span>&nbsp;+&nbsp;oldpath&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">except</span><span>&nbsp;NameError:&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;</span><span class="string">&quot;Error&nbsp;when&nbsp;rename&nbsp;the&nbsp;file&nbsp;&quot;</span><span>&nbsp;+&nbsp;oldpath&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">except</span><span>&nbsp;OSError:&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">#print&nbsp;OSError</span><span>&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;newpath&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;The&nbsp;file&nbsp;is&nbsp;already&nbsp;exist!&quot;</span><span>&nbsp;</span></span></li><li><span><span class="keyword">if</span><span>&nbsp;__name__&nbsp;==&nbsp;</span><span class="string">'__main__'</span><span>:&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;s_rename(<span class="string">&quot;F:\\code&quot;</span><span>,</span><span class="string">&quot;.ph&quot;</span><span>,</span><span class="string">&quot;.pl&quot;</span><span>)&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">#print&nbsp;&quot;test&quot;</span><span>&nbsp;</span></span></li></ol></pre>
<p>&nbsp;</p>]]></description>
			<link>http://neeao.com/archives/13/</link>
			<category domain="http://neeao.com/category/develop/">程序开发</category>
			<pubDate>2009-09-15 16:15</pubDate>
		</item>
		<item>
			<guid>http://neeao.com/archives/12/</guid>
			<title>Python的url编码函数使用的一个小问题</title>
			<author>Neeao</author>
			<description><![CDATA[Neeao's Blog ( http://neeao.com/ ) : <p>python的url编码函数是在类<tt class="descclassname">urllib</tt>库中，使用方法是：</p>
<p><tt class="descclassname">编码：urllib</tt>.<tt class="descname">quote</tt><big>(</big><em>string</em><span class="optional">[</span>, <em>safe</em><span class="optional">]</span><big>)，除了三个符号</big><tt class="docutils literal"><span class="pre">&ldquo;_.-&rdquo;</span></tt><big>外，将所有符号编码，后面的参数safe是不编码的字符，使用的时候如果不设置的话，会将斜杠，冒号，等号，问号都给编码了。</big><tt class="descname"><br />
</tt></p>
<p>如下：</p>
<pre><ol class="dp-py"><li class="alt"><span><span>&gt;&gt;&gt;&nbsp;</span><span class="keyword">import</span><span>&nbsp;urllib&nbsp;</span></span></li><li><span>&gt;&gt;&gt;&nbsp;<span class="keyword">print</span><span>&nbsp;urllib.quote(</span><span class="string">&quot;http://neeao.com/index.php?id=1&quot;</span><span>)&nbsp;</span></span></li><li class="alt"><span>http%<span class="number">3A</span><span>//neeao.com/index.php%</span><span class="number">3Fid</span><span>%</span><span class="number">3D1</span><span>&nbsp;</span></span></li></ol></pre>
<p>这样在使用urllib.urlopen打开编码后的网址的时候，就会报错了。</p>
<p>设置下不编码的符号：</p>
<pre><ol class="dp-py"><li class="alt"><span><span>&gt;&gt;&gt;&nbsp;</span><span class="keyword">print</span><span>&nbsp;urllib.quote(</span><span class="string">&quot;http://neeao.com/index.php?id=1&quot;</span><span>,</span><span class="string">&quot;:?=/&quot;</span><span>)&nbsp;</span></span></li><li><span>http://neeao.com/index.php?id=<span class="number">1</span><span>&nbsp;</span></span></li></ol></pre>
<p>这下就好了。</p>]]></description>
			<link>http://neeao.com/archives/12/</link>
			<category domain="http://neeao.com/category/develop/">程序开发</category>
			<pubDate>2009-09-14 17:52</pubDate>
		</item>
		<item>
			<guid>http://neeao.com/archives/7/</guid>
			<title>纯C++的Socket访问Http封装类</title>
			<author>Neeao</author>
			<description><![CDATA[Neeao's Blog ( http://neeao.com/ ) : <p>1.项目中要使用C++来访问Web服务器，从网上找了个C++的封装类，其中调用了MFC，在VC2005上用能用，但是移植到VC2003就出问题了，干脆修改成了纯C++的，不敢独享，share之。</p>
<p>2.以下是调用方法：</p>
<pre><ol class="dp-cpp"><li class="alt"><span><span class="preprocessor">#include&nbsp;&quot;stdafx.h&quot;</span><span>&nbsp;</span></span></li><li><span><span class="preprocessor">#include&nbsp;&lt;iostream&gt;</span><span>&nbsp;</span></span></li><li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;string&gt;</span><span>&nbsp;</span></span></li><li><span><span class="preprocessor">#include&nbsp;&quot;http\request.h&quot;</span><span>&nbsp;</span></span></li><li class="alt"><span>&nbsp;</span></li><li><span><span class="keyword">using</span><span>&nbsp;</span><span class="keyword">namespace</span><span>&nbsp;std;&nbsp;</span></span></li><li class="alt"><span>&nbsp;</span></li><li><span><span class="datatypes">int</span><span>&nbsp;_tmain(</span><span class="datatypes">int</span><span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])&nbsp;</span></span></li><li class="alt"><span>{&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Request&nbsp;myRequest;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//初始化类</span><span>&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sHeaderSend;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//定义http头</span><span>&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sHeaderReceive;&nbsp;&nbsp;<span class="comment">//返回头</span><span>&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sMessage=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//返回页面内容</span><span>&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes">bool</span><span>&nbsp;IsPost=</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span><span class="comment">//是否Post提交</span><span> <br /></span></span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="datatypes">int</span><span>&nbsp;i&nbsp;=myRequest.SendRequest(IsPost,&nbsp;</span><span class="string">&quot;http://neeao.com&quot;</span><span>,&nbsp;sHeaderSend,&nbsp;</span></span></li><li><span><span>                                 sHeaderReceive,&nbsp;sMessage);&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(i)&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;<span class="string">&quot;Http头:&quot;</span><span>&lt;&lt;endl;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&nbsp;sHeaderSend&nbsp;&lt;&lt;endl;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;<span class="string">&quot;响应头&quot;</span><span>&lt;&lt;endl;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&nbsp;sHeaderReceive&nbsp;&lt;&lt;endl;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;<span class="string">&quot;网页内容&quot;</span><span>&lt;&lt;endl;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&nbsp;sMessage&nbsp;&lt;&lt;endl;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}<span class="keyword">else</span><span>&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;<span class="string">&quot;网络不可到达&quot;</span><span>&lt;&lt;endl;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;system(<span class="string">&quot;pause&quot;</span><span>);&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;0;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;</span></li></ol></pre>
<p>直接上代码了，blog附件上传貌似有点问题，</p>
<p>Request.h</p>
<pre><ol class="dp-cpp"><li class="alt"><span><span class="comment">//****************************************** </span><span>&nbsp;</span></span></li><li><span class="comment">//纯C++的Socket访问Http封装类，Neeao修改 </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//http://neeao.com </span><span>&nbsp;</span></li><li><span class="comment">//2009-08-25 </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//****************************************** </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#if&nbsp;!defined(AFX_REQUEST_H__9F2C9BB6_CBA7_40AF_80A4_09A1CE1CE220__INCLUDED_) </span><span>&nbsp;</span></li><li><span class="preprocessor">#define&nbsp;AFX_REQUEST_H__9F2C9BB6_CBA7_40AF_80A4_09A1CE1CE220__INCLUDED_ </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="preprocessor">#if&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000 </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#pragma&nbsp;once </span><span>&nbsp;</span></li><li><span class="preprocessor">#endif&nbsp;//&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000 </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt; </span><span>&nbsp;</span></li><li><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt; </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#include&nbsp;&lt;string.h&gt; </span><span>&nbsp;</span></li><li><span class="preprocessor">#include&nbsp;&lt;winsock2.h&gt; </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#pragma&nbsp;comment(lib,&nbsp;&quot;WS2_32&quot;)&nbsp; </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="keyword">using</span><span>&nbsp;</span><span class="keyword">namespace</span><span>&nbsp;std; &nbsp;</span></li><li><span class="preprocessor">#define&nbsp;MEM_BUFFER_SIZE&nbsp;10 </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>/*&nbsp; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;HTTPRequest:&nbsp;Structure&nbsp;that&nbsp;returns&nbsp;the&nbsp;HTTP&nbsp;headers&nbsp;and&nbsp;message &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;the&nbsp;request &nbsp;</span></li><li class="alt"><span>*/ &nbsp;</span></li><li><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;</span></li><li class="alt"><span>{&nbsp; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">LPSTR</span><span>&nbsp;headerSend;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Pointer&nbsp;to&nbsp;HTTP&nbsp;header&nbsp;Send&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">LPSTR</span><span>&nbsp;headerReceive;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Pointer&nbsp;to&nbsp;HTTP&nbsp;headers&nbsp;Receive </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">LPSTR</span><span>&nbsp;message;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Pointer&nbsp;to&nbsp;the&nbsp;HTTP&nbsp;message&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">long</span><span>&nbsp;messageLength;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Length&nbsp;of&nbsp;the&nbsp;message&nbsp; </span><span>&nbsp;</span></li><li><span>}&nbsp;HTTPRequest; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">/*&nbsp; </span>&nbsp;</li><li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;MemBuffer:&nbsp;&nbsp;Structure&nbsp;used&nbsp;to&nbsp;implement&nbsp;a&nbsp;memory&nbsp;buffer,&nbsp;which&nbsp;is&nbsp;a </span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;of&nbsp;memory&nbsp;that&nbsp;will&nbsp;grow&nbsp;to&nbsp;hold&nbsp;variable&nbsp;sized </span>&nbsp;</span></li><li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parts&nbsp;of&nbsp;the&nbsp;HTTP&nbsp;message.&nbsp; </span>&nbsp;</span></li><li><span><span class="comment">*/</span><span>&nbsp;</span></span></li><li class="alt"><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">struct</span><span>&nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*buffer; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*position; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">size_t</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size; &nbsp;</span></li><li><span>}&nbsp;MemBuffer; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="keyword">class</span><span>&nbsp;Request&nbsp;&nbsp; &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span class="keyword">public</span><span>: &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Request(); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">virtual</span><span>&nbsp;~Request(); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="keyword">private</span><span>: &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferCreate(MemBuffer&nbsp;*b); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferGrow(MemBuffer&nbsp;*b); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferAddByte(MemBuffer&nbsp;*b,&nbsp;unsigned&nbsp;</span><span class="datatypes">char</span><span>&nbsp;byt); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferAddBuffer(MemBuffer&nbsp;*b,&nbsp;unsigned&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*buffer,&nbsp;</span><span class="datatypes">size_t</span><span>&nbsp;size); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">DWORD</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetHostAddress(</span><span class="datatypes">LPCSTR</span><span>&nbsp;host); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendString(SOCKET&nbsp;sock,</span><span class="datatypes">LPCSTR</span><span>&nbsp;str); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">BOOL</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ValidHostChar(</span><span class="datatypes">char</span><span>&nbsp;ch); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParseURL(string&nbsp;url,</span><span class="datatypes">LPSTR</span><span>&nbsp;protocol,</span><span class="datatypes">int</span><span>&nbsp;lprotocol,&nbsp;</span><span class="datatypes">LPSTR</span><span>&nbsp;host,</span><span class="datatypes">int</span><span>&nbsp;lhost,</span><span class="datatypes">LPSTR</span><span>&nbsp;request,</span><span class="datatypes">int</span><span>&nbsp;lrequest,</span><span class="datatypes">int</span><span>&nbsp;*port); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">int</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendHTTP(string&nbsp;url,</span><span class="datatypes">LPCSTR</span><span>&nbsp;headerReceive,</span><span class="datatypes">BYTE</span><span>&nbsp;*post,&nbsp;</span><span class="datatypes">DWORD</span><span>&nbsp;postLength,HTTPRequest&nbsp;*req); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="keyword">public</span><span>: &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">int</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendRequest(</span><span class="datatypes">bool</span><span>&nbsp;IsPost,&nbsp;string&nbsp;url,&nbsp;string&amp;&nbsp;psHeaderSend,&nbsp;string&amp;&nbsp;pszHeaderReceive,string&amp;&nbsp;pszMessage); &nbsp;</span></li><li class="alt"><span>}; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#endif&nbsp;//&nbsp;!defined(AFX_REQUEST_H__9F2C9BB6_CBA7_40AF_80A4_09A1CE1CE220__INCLUDED_) </span><span>&nbsp;</span></li></ol></pre>
<p>Request.cpp</p>
<p>&nbsp;</p>
<pre><ol class="dp-cpp"><li class="alt"><span><span class="comment">//****************************************** </span><span>&nbsp;</span></span></li><li><span class="comment">//纯C++的Socket访问Http封装类，Neeao修改 </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//http://neeao.com </span><span>&nbsp;</span></li><li><span class="comment">//2009-08-25 </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//****************************************** </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="preprocessor">#include&nbsp;&quot;stdafx.h&quot; </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#include&nbsp;&quot;Request.h&quot; </span><span>&nbsp;</span></li><li><span class="preprocessor">#include&nbsp;&lt;string&gt; </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#ifdef&nbsp;_DEBUG </span><span>&nbsp;</span></li><li><span class="preprocessor">#undef&nbsp;THIS_FILE </span><span>&nbsp;</span></li><li class="alt"><span class="keyword">static</span><span>&nbsp;</span><span class="datatypes">char</span><span>&nbsp;THIS_FILE[]=__FILE__; &nbsp;</span></li><li><span class="preprocessor">#define&nbsp;new&nbsp;DEBUG_NEW </span><span>&nbsp;</span></li><li class="alt"><span class="preprocessor">#endif </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">////////////////////////////////////////////////////////////////////// </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;Construction/Destruction </span><span>&nbsp;</span></li><li><span class="comment">////////////////////////////////////////////////////////////////////// </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>Request::Request() &nbsp;</span></li><li class="alt"><span>{ &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>Request::~Request() &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="comment">//MemBufferCreate:&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Passed&nbsp;a&nbsp;MemBuffer&nbsp;structure,&nbsp;will&nbsp;allocate&nbsp;a&nbsp;memory&nbsp;buffer&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;MEM_BUFFER_SIZE.&nbsp;&nbsp;This&nbsp;buffer&nbsp;can&nbsp;then&nbsp;grow&nbsp;as&nbsp;needed. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="keyword">void</span><span>&nbsp;Request::MemBufferCreate(MemBuffer&nbsp;*b) &nbsp;</span></li><li class="alt"><span>{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;size&nbsp;=&nbsp;MEM_BUFFER_SIZE; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;buffer&nbsp;=(unsigned&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*)&nbsp;malloc(&nbsp;b-&gt;size&nbsp;); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;position&nbsp;=&nbsp;b-&gt;buffer; &nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;MemBufferGrow:&nbsp;&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;buffer&nbsp;that&nbsp;was&nbsp;passed&nbsp;to&nbsp;this&nbsp;function.&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="keyword">void</span><span>&nbsp;Request::MemBufferGrow(MemBuffer&nbsp;*b) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">size_t</span><span>&nbsp;sz; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;sz&nbsp;=&nbsp;b-&gt;position&nbsp;-&nbsp;b-&gt;buffer; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;size&nbsp;=&nbsp;b-&gt;size&nbsp;*2; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;buffer&nbsp;=(unsigned&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*)&nbsp;realloc(b-&gt;buffer,b-&gt;size); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;position&nbsp;=&nbsp;b-&gt;buffer&nbsp;+&nbsp;sz;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;readjust&nbsp;current&nbsp;position </span><span>&nbsp;</span></li><li><span>} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;MemBufferAddByte:&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;a&nbsp;single&nbsp;byte&nbsp;to&nbsp;the&nbsp;memory&nbsp;buffer,&nbsp;grow&nbsp;if&nbsp;needed. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="keyword">void</span><span>&nbsp;Request::MemBufferAddByte(MemBuffer&nbsp;*b,unsigned&nbsp;</span><span class="datatypes">char</span><span>&nbsp;byt) &nbsp;</span></li><li class="alt"><span>{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;(</span><span class="datatypes">size_t</span><span>)(b-&gt;position-b-&gt;buffer)&nbsp;&gt;=&nbsp;b-&gt;size&nbsp;) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferGrow(b); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*(b-&gt;position++)&nbsp;=&nbsp;byt; &nbsp;</span></li><li><span>} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;MemBufferAddBuffer: </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;a&nbsp;range&nbsp;of&nbsp;bytes&nbsp;to&nbsp;the&nbsp;memory&nbsp;buffer,&nbsp;grow&nbsp;if&nbsp;needed. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="keyword">void</span><span>&nbsp;Request::MemBufferAddBuffer(MemBuffer&nbsp;*b, &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*buffer,&nbsp;</span><span class="datatypes">size_t</span><span>&nbsp;size) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(&nbsp;((</span><span class="datatypes">size_t</span><span>)(b-&gt;position-b-&gt;buffer)+size)&nbsp;&gt;=&nbsp;b-&gt;size&nbsp;) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferGrow(b); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(b-&gt;position,buffer,size); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;b-&gt;position+=size; &nbsp;</span></li><li><span>} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;GetHostAddress:&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resolve&nbsp;using&nbsp;DNS&nbsp;or&nbsp;similar(WINS,etc)&nbsp;the&nbsp;IP&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;for&nbsp;a&nbsp;domain&nbsp;name&nbsp;such&nbsp;as&nbsp;www.wdj.com.&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="datatypes">DWORD</span><span>&nbsp;Request::GetHostAddress(</span><span class="datatypes">LPCSTR</span><span>&nbsp;host) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">struct</span><span>&nbsp;hostent&nbsp;*phe; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*p; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;phe&nbsp;=&nbsp;gethostbyname(&nbsp;host&nbsp;); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(phe==NULL) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;0; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;*phe-&gt;h_addr_list; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;*((</span><span class="datatypes">DWORD</span><span>*)p); &nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;SendString:&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send&nbsp;a&nbsp;string(null&nbsp;terminated)&nbsp;over&nbsp;the&nbsp;specified&nbsp;socket. </span><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="keyword">void</span><span>&nbsp;Request::SendString(SOCKET&nbsp;sock,</span><span class="datatypes">LPCSTR</span><span>&nbsp;str) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;send(sock,str,strlen(str),0); &nbsp;</span></li><li><span>} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;ValidHostChar:&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;TRUE&nbsp;if&nbsp;the&nbsp;specified&nbsp;character&nbsp;is&nbsp;valid </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;a&nbsp;host&nbsp;name,&nbsp;i.e.&nbsp;A-Z&nbsp;or&nbsp;0-9&nbsp;or&nbsp;-.:&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="datatypes">BOOL</span><span>&nbsp;Request::ValidHostChar(</span><span class="datatypes">char</span><span>&nbsp;ch) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>(&nbsp;isalpha(ch)&nbsp;||&nbsp;isdigit(ch) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;ch==</span><span class="string">'-'</span><span>&nbsp;||&nbsp;ch==</span><span class="string">'.'</span><span>&nbsp;||&nbsp;ch==</span><span class="string">':'</span><span>&nbsp;); &nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;ParseURL:&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used&nbsp;to&nbsp;break&nbsp;apart&nbsp;a&nbsp;URL&nbsp;such&nbsp;as&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.localhost.com:80/TestPost.htm&nbsp;into&nbsp;protocol,&nbsp;port,&nbsp;host&nbsp;and&nbsp;request. </span><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="keyword">void</span><span>&nbsp;Request::ParseURL(string&nbsp;url,</span><span class="datatypes">LPSTR</span><span>&nbsp;protocol,</span><span class="datatypes">int</span><span>&nbsp;lprotocol,</span><span class="datatypes">LPSTR</span><span>&nbsp;host,</span><span class="datatypes">int</span><span>&nbsp;lhost,</span><span class="datatypes">LPSTR</span><span>&nbsp;request,</span><span class="datatypes">int</span><span>&nbsp;lrequest,</span><span class="datatypes">int</span><span>&nbsp;*port) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;*work,*ptr,*ptr2; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*protocol&nbsp;=&nbsp;*host&nbsp;=&nbsp;*request&nbsp;=&nbsp;0; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;*port=80; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;work&nbsp;=&nbsp;strdup(url.c_str()); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strupr(work); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;=&nbsp;strchr(work,</span><span class="string">':'</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;find&nbsp;protocol&nbsp;if&nbsp;any </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(ptr!=NULL) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(ptr++)&nbsp;=&nbsp;0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstrcpyn(protocol,work,lprotocol); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstrcpyn(protocol,</span><span class="string">&quot;HTTP&quot;</span><span>,lprotocol); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;=&nbsp;work; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;(*ptr==</span><span class="string">'/'</span><span>)&nbsp;&amp;&amp;&nbsp;(*(ptr+1)==</span><span class="string">'/'</span><span>)&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;skip&nbsp;past&nbsp;opening&nbsp;/'s&nbsp; </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr+=2; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ptr2&nbsp;=&nbsp;ptr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;find&nbsp;host </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(&nbsp;ValidHostChar(*ptr2)&nbsp;&amp;&amp;&nbsp;*ptr2&nbsp;) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr2++; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;*ptr2=0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;lstrcpyn(host,ptr,lhost); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;lstrcpyn(request,url.c_str()&nbsp;+&nbsp;(ptr2-work),lrequest);&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;find&nbsp;the&nbsp;request </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;=&nbsp;strchr(host,</span><span class="string">':'</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;find&nbsp;the&nbsp;port&nbsp;number,&nbsp;if&nbsp;any </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(ptr!=NULL) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ptr=0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*port&nbsp;=&nbsp;atoi(ptr+1); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;free(work); &nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;SendHTTP:&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main&nbsp;entry&nbsp;point&nbsp;for&nbsp;this&nbsp;code.&nbsp;&nbsp; </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;The&nbsp;URL&nbsp;to&nbsp;GET/POST&nbsp;to/from. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerSend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Headers&nbsp;to&nbsp;be&nbsp;sent&nbsp;to&nbsp;the&nbsp;server. </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Data&nbsp;to&nbsp;be&nbsp;posted&nbsp;to&nbsp;the&nbsp;server,&nbsp;NULL&nbsp;if&nbsp;GET. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postLength&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Length&nbsp;of&nbsp;data&nbsp;to&nbsp;post. </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Contains&nbsp;the&nbsp;message&nbsp;and&nbsp;headerSend&nbsp;sent&nbsp;by&nbsp;the&nbsp;server. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">// </span><span>&nbsp;</span></li><li><span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns&nbsp;1&nbsp;on&nbsp;failure,&nbsp;0&nbsp;on&nbsp;success. </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="datatypes">int</span><span>&nbsp;Request::SendHTTP(string&nbsp;url,</span><span class="datatypes">LPCSTR</span><span>&nbsp;headerReceive,</span><span class="datatypes">BYTE</span><span>&nbsp;*post, &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">DWORD</span><span>&nbsp;postLength,HTTPRequest&nbsp;*req) &nbsp;</span></li><li><span>{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;WSADATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WsaData; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SOCKADDR_IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sin; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SOCKET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sock; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[512]; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protocol[20],host[256],request[1024]; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">int</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l,port,chars,err; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MemBuffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headersBuffer,messageBuffer; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerSend[1024]; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">BOOL</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ParseURL(url,protocol,</span><span class="keyword">sizeof</span><span>(protocol),host,</span><span class="keyword">sizeof</span><span>(host),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Parse&nbsp;the&nbsp;URL </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request,</span><span class="keyword">sizeof</span><span>(request),&amp;port); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(strcmp(protocol,</span><span class="string">&quot;HTTP&quot;</span><span>)) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;1; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;WSAStartup&nbsp;(0x0101,&nbsp;&amp;WsaData);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Init&nbsp;Winsock </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(err!=0) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;1; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sock&nbsp;=&nbsp;socket&nbsp;(AF_INET,&nbsp;SOCK_STREAM,&nbsp;0); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//if&nbsp;(socket&nbsp;==&nbsp;INVALID_SOCKET) </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(sock&nbsp;==&nbsp;INVALID_SOCKET) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;1; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;sin.sin_family&nbsp;=&nbsp;AF_INET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Connect&nbsp;to&nbsp;web&nbsp;sever </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sin.sin_port&nbsp;=&nbsp;htons(&nbsp;(unsigned&nbsp;</span><span class="datatypes">short</span><span>)port&nbsp;); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;sin.sin_addr.s_addr&nbsp;=&nbsp;GetHostAddress(host); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;connect&nbsp;(sock,(LPSOCKADDR)&amp;sin,&nbsp;</span><span class="keyword">sizeof</span><span>(SOCKADDR_IN)&nbsp;)&nbsp;) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;1; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;!*request&nbsp;) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstrcpyn(request,</span><span class="string">&quot;/&quot;</span><span>,</span><span class="keyword">sizeof</span><span>(request)); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;post&nbsp;==&nbsp;NULL&nbsp;) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;GET&nbsp;&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(headerSend,&nbsp;</span><span class="string">&quot;GET&nbsp;&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;POST&nbsp;&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(headerSend,&nbsp;</span><span class="string">&quot;POST&nbsp;&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,request); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;request); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;&nbsp;HTTP/1.0\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;&nbsp;HTTP/1.0\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;Accept:&nbsp;image/gif,&nbsp;image/x-xbitmap,&quot;</span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;image/jpeg,&nbsp;image/pjpeg,&nbsp;application/vnd.ms-excel,&quot;</span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;application/msword,&nbsp;application/vnd.ms-powerpoint,&quot;</span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;*/*\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;Accept:&nbsp;image/gif,&nbsp;image/x-xbitmap,&quot;</span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;image/jpeg,&nbsp;image/pjpeg,&nbsp;application/vnd.ms-excel,&quot;</span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;application/msword,&nbsp;application/vnd.ms-powerpoint,&quot;</span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;&nbsp;*/*\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;Accept-Language:&nbsp;en-us\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;Accept-Language:&nbsp;en-us\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;Accept-Encoding:&nbsp;gzip,&nbsp;default\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;Accept-Encoding:&nbsp;gzip,&nbsp;default\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;User-Agent:&nbsp;Neeao/4.0\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;User-Agent:&nbsp;Neeao/4.0\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(postLength) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buffer,</span><span class="string">&quot;Content-Length:&nbsp;%ld\r\n&quot;</span><span>,postLength); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,buffer); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;buffer); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//SendString(sock,&quot;Cookie:&nbsp;mycookie=blablabla\r\n&quot;); </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;&nbsp;printf(&quot;Cookie:&nbsp;mycookie=blablabla\r\n&quot;); </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;Host:&nbsp;&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;Host:&nbsp;&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,host); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;host); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;\r\n&quot;</span><span>); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;(headerReceive!=NULL)&nbsp;&amp;&amp;&nbsp;*headerReceive&nbsp;) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,headerReceive); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;headerReceive); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;SendString(sock,</span><span class="string">&quot;\r\n&quot;</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Send&nbsp;a&nbsp;blank&nbsp;line&nbsp;to&nbsp;signal&nbsp;end&nbsp;of&nbsp;HTTP&nbsp;headerReceive </span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;</span><span class="string">&quot;\r\n&quot;</span><span>); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;(post!=NULL)&nbsp;&amp;&amp;&nbsp;postLength&nbsp;) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(sock,(</span><span class="keyword">const</span><span>&nbsp;</span><span class="datatypes">char</span><span>*)post,postLength,0); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post[postLength]&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span class="string">'\0'</span><span>; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(headerSend,&nbsp;(</span><span class="keyword">const</span><span>&nbsp;</span><span class="datatypes">char</span><span>*)post); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//strcpy(req-&gt;headerSend,&nbsp;headerSend); </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;req-&gt;headerSend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&nbsp;malloc(&nbsp;</span><span class="keyword">sizeof</span><span>(</span><span class="datatypes">char</span><span>*)&nbsp;*&nbsp;strlen(headerSend)); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(req-&gt;headerSend,&nbsp;(</span><span class="datatypes">char</span><span>*)&nbsp;headerSend&nbsp;); &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MemBufferCreate(&amp;headersBuffer&nbsp;); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;chars&nbsp;=&nbsp;0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;=&nbsp;FALSE; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(!done) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;recv(sock,buffer,1,0); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(l&lt;0) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done=TRUE; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">switch</span><span>(*buffer) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;</span><span class="string">'\r'</span><span>: &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;</span><span class="string">'\n'</span><span>: &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(chars==0) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;=&nbsp;TRUE; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chars=0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">default</span><span>: &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chars++; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferAddByte(&amp;headersBuffer,*buffer); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;req-&gt;headerReceive&nbsp;&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&nbsp;headersBuffer.buffer; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*(headersBuffer.position)&nbsp;=&nbsp;0; &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MemBufferCreate(&amp;messageBuffer);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Now&nbsp;read&nbsp;the&nbsp;HTTP&nbsp;body </span><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">do</span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;recv(sock,buffer,</span><span class="keyword">sizeof</span><span>(buffer)-1,0); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(l&lt;0) &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(buffer+l)=0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemBufferAddBuffer(&amp;messageBuffer,&nbsp;(unsigned&nbsp;</span><span class="datatypes">char</span><span>*)&amp;buffer,&nbsp;l); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">while</span><span>(l&gt;0); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*messageBuffer.position&nbsp;=&nbsp;0; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;req-&gt;message&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&nbsp;messageBuffer.buffer; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;req-&gt;messageLength&nbsp;=&nbsp;(messageBuffer.position&nbsp;-&nbsp;messageBuffer.buffer); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(sock);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Cleanup </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;0; &nbsp;</span></li><li class="alt"><span>} &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//&nbsp;SendRequest </span><span>&nbsp;</span></li><li><span class="comment">// </span><span>&nbsp;</span></li><li class="alt"><span class="comment">//******************************************************************************************************* </span><span>&nbsp;</span></li><li><span class="datatypes">int</span><span>&nbsp;Request::SendRequest(</span><span class="datatypes">bool</span><span>&nbsp;IsPost,&nbsp;string&nbsp;url,&nbsp;string&amp;&nbsp;psHeaderSend,&nbsp;string&amp;&nbsp;psHeaderReceive,&nbsp;string&amp;&nbsp;psMessage) &nbsp;</span></li><li class="alt"><span>{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;HTTPRequest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">int</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i,rtn; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">LPSTR</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;req.headerSend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;req.headerReceive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;req.message&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Read&nbsp;in&nbsp;arguments </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(IsPost) &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;POST&nbsp;*/ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;psHeaderSend.length(); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&nbsp;malloc(i+1); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer,&nbsp;psHeaderSend.c_str()); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;SendHTTP(&nbsp;url, &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;Content-Type:&nbsp;application/x-www-form-urlencoded\r\n&quot;</span><span>, &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unsigned&nbsp;</span><span class="datatypes">char</span><span>*)buffer, &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i, &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;req); &nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(buffer); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span class="comment">/*&nbsp;GET&nbsp;*/</span><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtn&nbsp;=&nbsp;SendHTTP(url,NULL,NULL,0,&amp;req); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!rtn)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Output&nbsp;message&nbsp;and/or&nbsp;headerSend&nbsp; </span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psHeaderSend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;req.headerSend; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psHeaderReceive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;req.headerReceive; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psMessage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;req.message; &nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(req.headerSend); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(req.headerReceive); &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(req.message); &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;1; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;0; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span></li><li><span>}&nbsp;</span></li></ol></pre>
<p>&nbsp;</p>]]></description>
			<link>http://neeao.com/archives/7/</link>
			<category domain="http://neeao.com/category/develop/">程序开发</category>
			<pubDate>2009-08-25 17:42</pubDate>
		</item>
		<item>
			<guid>http://neeao.com/archives/2/</guid>
			<title>正则表达式不匹配某个字符串</title>
			<author>Neeao</author>
			<description><![CDATA[Neeao's Blog ( http://neeao.com/ ) : <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近项目中要用到一个正则表达式，排除某个字符串，我们知道排除单个字符串的话，可以用[^abc],这样就可以排除a或者b或者c了，但是要排除abc呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 网上找了下，都不太好用，自己写了个，php下测试可用，如匹配非.php这个字符，那么正则表达式就是：</p>
<p>&nbsp;&nbsp;&nbsp; \.[^p]{1}[^h]{1}[^p]{1}</p>
<p>&nbsp;&nbsp;&nbsp; php测试代码为：</p>
<pre><ol class="dp-c"><li class="alt"><span><span>&lt;?php&nbsp;</span></span></li><li><span><span class="vars">$subject</span><span>&nbsp;=&nbsp;</span><span class="string">&quot;neeao.gif&quot;</span><span>;&nbsp;</span></span></li><li class="alt"><span><span class="vars">$pattern</span><span>&nbsp;=&nbsp;</span><span class="string">'/\.[^p]{1}[^h]{1}[^p]{1}/'</span><span>;&nbsp;</span></span></li><li><span>preg_match(<span class="vars">$pattern</span><span>,&nbsp;</span><span class="vars">$subject</span><span>,&nbsp;</span><span class="vars">$matches</span><span>);&nbsp;</span></span></li><li class="alt"><span>print_r(<span class="vars">$matches</span><span>);&nbsp;</span></span></li><li><span>?&gt;&nbsp;&nbsp;</span></li></ol></pre>
<p>&nbsp;&nbsp; 返回结果为：</p>
<p>&nbsp;&nbsp; Array (     [0] =&gt; .gif )</p>
<p>&nbsp;&nbsp; 说明匹配成功了，其它语言的都大同小异。</p>
<p>&nbsp;&nbsp; 上面提到的只适合单个匹配的情况，没有考虑多个字符串的情况，评论中有朋友提出了另外一种方法，又测试了下，发现另外一种可以使用的方法：</p>
<p><strong>(?!php|gif).{3}</strong></p>
<p>不匹配php和gif，且字符串长度为3的字符串，测试之：</p>
<pre><ol class="dp-c"><li class="alt"><span><span>&lt;?php&nbsp;</span></span></li><li><span><span class="vars">$subject</span><span>&nbsp;=&nbsp;</span><span class="string">&quot;neeao.php.gif.ljk&quot;</span><span>;&nbsp;</span></span></li><li class="alt"><span><span class="vars">$pattern</span><span>&nbsp;=&nbsp;</span><span class="string">'/\.(?!php|gif).{3}/is'</span><span>;&nbsp;</span></span></li><li><span>preg_match(<span class="vars">$pattern</span><span>,&nbsp;</span><span class="vars">$subject</span><span>,&nbsp;</span><span class="vars">$matches</span><span>);&nbsp;</span></span></li><li class="alt"><span>print_r(<span class="vars">$matches</span><span>);&nbsp;</span></span></li><li><span>?&gt;&nbsp;&nbsp;</span></li></ol></pre>
<p>结果：Array (     [0] =&gt; .ljk )，成功匹配。</p>
<p>&nbsp;</p>]]></description>
			<link>http://neeao.com/archives/2/</link>
			<category domain="http://neeao.com/category/develop/">程序开发</category>
			<pubDate>2009-08-17 17:17</pubDate>
		</item>
	</channel>
</rss>

