使用WinINet和WinHTTP实现Http訪问
使用WinINet和WinHTTP实现Http訪问
飘飘白云 l_zhaohui@163.com 2007-11-30
Http訪问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向server提交数据,在这个例程中我使用POST方式,提交数据value1与value2,并从server得到他们的和(value1 + value2)。
为实现Http訪问,微软提供了二套API:WinINet, WinHTTP。WinHTTP比WinINet更加安全和健壮,能够这么觉得WinHTTP是WinINet的升级版本号。这两套API包括了非常多类似的函数与宏定义,呵呵,具体对照请查阅msdn中的文章“Porting WinINet Applications to WinHTTP”,在线MSDN连接:http://msdn2.microsoft.com/en-us/library/aa384068.aspx。在这个例程中,通过一个宏的设置来决定是使用WinHttp还是WinINet。代码例如以下:
#define USE_WINHTTP //Comment this line to user wininet.
以下来说说实现Http訪问的流程(两套API都一样的流程):
1, 首先我们打开一个Session获得一个HINTERNET session句柄;
2, 然后我们使用这个session句柄与server连接得到一个HINTERNET connect句柄;
3, 然后我们使用这个connect句柄来打开Http 请求得到一个HINTERNET request句柄;
4, 这时我们就能够使用这个request句柄来发送数据与读取从server返回的数据;
5, 最后依次关闭request,connect,session句柄。
在这个例程中以上各个流程都进行了简单封装,以便对照两套API函数的些许差异。以下让源码说话,原project是一个windows控制台project,你能够非常easy通过拷贝代码重建project。
另:假设你从server得到的返回数据是utf8格式的文本数据,你将须要对返回的数据进行转换才干正确显示中文,日文等。仅供參考,转换为ATL CStringW的函数见下:















完整代码例如以下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23



24

25

26

27

28

29

30



31



32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49



50

51

52

53

54



55

56

57

58

59

60

61

62

63

64

65



66

67

68

69

70



71

72

73

74

75



76

77

78

79

80



81

82

83

84

85



86



87

88

89

90

91

92



93

94



95

96

97

98



99

100

101



102

103

104



105

106

107

108

109

110

111

112

113

114

115

116

117



118

119

120

121

122

123

124

125

126



127

128

129

130

131

132

133

134

135



136

137

138



139

140

141

142

143

144

145



146

147

148

149

150

151

152

153

154



155

156

157

158

159

160

161

162

163

164



165

166

167

168

169

170

171

172

173



174

175

176

177

178

179

180

181

182

183



184

185

186

187

188

189

190

191

192



193

194

195

196

197

198

199

200

201



202

203



204

205

206

207

208

209

210

211

212

213



214

215

216

217

218

219

220

221

222

223

224

225



226

227

228

229

230

231

232



233

234

235

236

237

238

239



240

241

242

243

244

245



246

247

248

249

250

251



252

253

254

255

256

257



258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277



278

279

280

281

282

283



284

285

286

287

288

289



290

291

292

293

294

295



296

297



298

299

300

301



302

303

304

305

306

307

308

309

310

311

312

313

314

315

使用WinINet和WinHTTP实现Http訪问的更多相关文章
- 使用WinINet和WinHTTP实现Http访问
使用WinINet和WinHTTP实现Http访问 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value ...
- juniper 550M訪问自身公网IP回流内部IP
拓扑图示意: 网关设备juniper 550M, untrust 区: 公网地址段22.22.22.22/29 trust区: 内部员工PC地址:172.16.4.x /24 trust区: ...
- MySQL数据库能够用随意ip连接訪问的方法
通过CMD命令行改动数据库表的一个字段的值.实现连接,訪问. 第一步.找到MYSQL软件安装所在的bin文件夹. (1)cd\当前文件夹 (2)指定MYSQL安装的bin文件夹 (3)输入 -h lo ...
- ios 7.1 7.1.1 半完美越狱后 电脑訪问手机越狱文件夹的方法
7.1和7.1.1因为越狱不成熟,半完美越狱后电脑上无法訪问系统越狱文件夹,如var usr 等等. 今天有些意外地发现,能够在电脑上使用手机的越狱文件夹我手机 i4 7.1.1 联通 半完美越狱,没 ...
- jQuery訪问属性,绝对定位
一. jQuery訪问属性 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- httpclient模拟浏览器訪问站点
HttpClient 是 Apache Jakarta Common 下的子项目.能够用来提供高效的.最新的.功能丰富的支持 HTTP 协议的client编程工具包.而且它支持 HTTP 协议最新的版 ...
- Chapter 1 Securing Your Server and Network(6):为SQL Server訪问配置防火墙
原文出处:http://blog.csdn.net/dba_huangzj/article/details/38082123,专题文件夹:http://blog.csdn.net/dba_huangz ...
- CentOS 配置httpd使局域网能够正常訪问
[转载请注明出处: 钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/37611859] 问题: 在CentOS上安装apache,配置好 ...
- Kivy A to Z -- 怎样从python代码中直接訪问Android的Service
在Kivy中,通过pyjnius扩展能够间接调用Java代码,而pyjnius利用的是Java的反射机制.可是在Python对象和Java对象中转来转去总让人感觉到十分别扭.好在android提供了b ...
随机推荐
- js获取css属性方法
function getDefaultStyle(obj,attribute){ return obj.currentStyle?obj.currentStyle[attribute] : docum ...
- 18款js和jquery文字特效代码分享
18款js和jquery文字特效代码分享 jQCloud标签云插件_热门城市文字标签云代码 js 3d标签云特效关键词文字球状标签云代码 原生JS鼠标悬停文字球状放大显示效果代码 原生js文字动画圆形 ...
- 基于Lua的清除类游戏算法
最近在开发游戏,用Lua语言.习惯了其它的语言,然后对Lua的一些语法很不习惯. 比如table的元素个数的取值,比switch语句等等. 不过没有办法,还是要运用Lua来写游戏的.看来学C++还真的 ...
- Python 手册——开胃菜
如果你写过大规模的Shell脚本,应该会有过这样的体会:你还非常想再加一些别的功能进去,但它已经太大. 太慢.太复杂了:或者这个功能需要调用一个系统函数,或者它只适合通过C来调用……通常这些问题还不足 ...
- PHPStorm——配置修改
字体修改: FiraCode字体:https://github.com/tonsky/FiraCode 1.双击安装字体 2. 关闭错别字检测
- iOS 细节 问题
1.当一个空指针(nil pointer)调用了一个方法会发生什么? 安然无恙 —— 这是oc自带的消息机制,nil也能发送消息,而不会报错 2.为什么retainCount绝对不能用在发布的代码中? ...
- jsonp跨域问题记录
这段时间用H5做移动app开发,遇到不少之前做web的时候不曾遇到的问题,记录一下,共勉-- 首先说一个:js跨域取数的问题 描述: 之前做web都是通过后台获取数据,没考虑过跨域的问题.这次用h5 ...
- jquery中each遍历对象和数组示例
通用遍历方法,可用于遍历对象和数组.$().each(),回调函数拥有两个参数: 第一个为对象的成员或数组的索引,第二个为对应变量或内容.如需退出each循环可使回调函数返回false 现有如下两个s ...
- 【测试】解决loadrunner11无法运行负载测试
问题: LoadRunner11版,录制完脚本,准备运行时提示‘ loadrunner controller 无法创建 vuser 确保您的 load generator ’, 脚本已经录好,但是运行 ...
- 如何通过js使搜索关键词高亮
给你推荐通过jquery来实现高亮关键词.jquery.textSearch-1.0.js代码: (function($){ $.fn.textSearch =function(str,options ...