WInInet 是微软对FTP HTTP 协议做封装库。通过WInInet 系列函数可以方便的实现基于HTTP FTP协议的文件上传下载。最近做了一个项目也是用到了WInInet实现HTTP协议的文件下载。在此过程中调用HttpQueryInfo可以查询服务器返回的HTTP头中的消息。HttpQueryInfo 本身是针对服务器HTTP头内容的解析函数。该函数实际上是对在缓存在本地的HTTP头内容进行解析,并向调用者返回指定的内容。
实际操作中发现,HttpQueryInfo函数经常会返回 12150 错误,也就是 "The requested header was not found"。比如查询"Content-Length"时。网上的帖子多数会提示程序员,当HTTP头中不含有"Content-Length"时,会导致此问题。我遇到的情况是,通过WireShark抓包发现HTTP头中确有"Content-Length",但是HttpQueryInfo就是查不到的情况。后经调试发现,在调用 InternetConnect 函数时,第二个参数要求传入HTTP服务器域名,若此时传入的域名带有http://协议头,那么就会导致HttpQueryInfo执行失败。若单独写入域名,就正常。比如:给InternetConnect 函数的第二个参数传入http://down.360safe.com/ 就会导致HttpQueryInfo的执行失败;若传入的是down.360safe.com 则执行成功。