路过 的大虾: 
1. InternetConnect     -->    创建Connect句柄, 成功返回句柄
2. HttpOpenRequest     -->    创建一个Request, 成功
3. HttpSendRequestEx   -->    发送请求. 成功
4. HttpQueryInfo       -->    检查返回http头中的Status code,  Error: 12019我在MSDN上找到的相关信息:
ERROR_WINHTTP_INCORRECT_HANDLE_STATE 
12019
The requested operation cannot be carried 
out because the handle supplied is not in 
the correct state. 救命啊。
还有个问题就是 对于 http server 返回302,该怎么处理啊?
在执行HttpEndRequest()时出错了又。
错误代码:ERROR_WINHTTP_RESEND_REQUEST  12032 The WinHTTP function failed. The desired function can be retried on the same request handle. 程序是可以自动重新发一个get 到新的URL,但是我之前
用HttpAddRequestHeaders()添加的Authorization却没有包含在第2次发出去的 get中。痛苦

解决方案 »

  1.   

    我想用HttpQueryInfo()来得到Status code,可是却失败了,12019。302是跳转,而且我发现是自动跳转的,(我也不晓得),
    可是它访问新地址时却少了Authorization,这不符合服务器的要求。
    怎么办?
      

  2.   

    这个其实挺简单的,自己写一个请求就明白了,GET 一下就清楚了。确认一下这个Status code 是不是服务器真正返回的。
      

  3.   

    我通过抓包能看到返回的Status code ,可是我去调用HttpQueryInfo却产生12019的错误
    The requested operation cannot be carried 
    out because the handle supplied is not in 
    the correct state. 
    以上 这个提示是在MSDN上找来的,我不晓得该怎么去fix this bug
      

  4.   

    那你肯定是你的别人的类吧,自己写的是没问题的。 可以用API 写个简单的测一下。
      

  5.   

    呵呵,可能是我没说明白。我的意思你用SOCKET API直接写,请求然后看一下返回就明白了。
      

  6.   

    有bug不能逃避阿
    老是逃避我觉得没进步的
    老兄,加油
      

  7.   

    自己搞定了。。
    换个号接分,哈哈问题:
    1. InternetConnect     -->    创建Connect句柄, 成功返回句柄
    2. HttpOpenRequest     -->    创建一个Request, 成功
    3. HttpSendRequestEx   -->    发送请求. 成功
    4. HttpQueryInfo       -->    检查返回http头中的Status code,  Error: 12019答案:原先我是HttpEndRequest()在HttpQueryInfo ()后面,
    看样子这样是不行的。
    换了下次序,HttpSendRequestEx() --> HttpEndRequest() --> HttpQueryInfo() ,这样就OK啦。(原因我也说不上来,突然来的灵感,try了下就OK了)
    顺便说一下,HttpEndRequest()时出错了又。
    错误代码:ERROR_WINHTTP_RESEND_REQUEST  12032The WinHTTP function failed. The desired function can be retried on the same request handle. 
    解决方法:再调用一次HttpEndRequest就OK了,(不知道是不是和URL转移的次数有关,我的程序涉及的server 会URL转移一次)对于我程序自动对新地址发出的Get中不包含Authorization的解决方法是,再次调用HttpAddRequestHeaders(,,,HTTP_ADDREQ_FLAG_ADD_IF_NEW)解决方法可能不怎么地,但是从外面看上去好像没什么问题。顺便说一下,其实我是想实现Https,我不知道如何用SOCKET API 去实现,而且怕引入新的问题,既然有API可以利用,我想这些API应该比我写出来的东西要好些。过几天再结帖,
    看看有没有人再提出点我不晓得的好东东。
      

  8.   

    再提出点问题:用这种方式去建立Https连接,如何实现忽略认证的动作?
    就像IE6那样,在地址栏里输入“https://......“,就会弹出个要你安装认证的对话框,
    如果选择不安装的话,IE6可以继续执行https。如何使上面的程序实现呢?
    是不是要带什么参数信息之类的?
      

  9.   

    由于是异步的,所以在HttpEndRequest后,还需要等待操作结束(回调的时候返回INTERNET_STATUS_REQUEST_COMPLETE,并且dwError == ERROR_SUCCESS) 时才能HttpQueryInfo