none
使用CInternetSession进行authentication的问题 RRS feed

  • 问题

  •  

    我定义了一个函数用于访问需要digest authentication的http页面,用户名和密码作为参数传入。

    函数大致结构如下:
    当调用pFile->SendRequest时,web服务器会返回401代码,此时pFile->SendRequest内部会用user和

    pwd计算出authorization header,加入到http header中,并再次发送请求,这时返回200,页面打开。
    现在的问题是,当第一次用user1和pwd1调用函数GetHttpPage()之后,如果换成其他的例如user2和

    pwd2再次调用,pFile->SendRequest()仍然会用之前用user1和pwd1计算出的authorization header进行

    请求,而不会用user2和pwd2。这个函数应该是没有全局变量啊,似乎这个authorization header被缓存

    起来了,不知道这个信息被保存到哪里了?怎么能设置参数让pFile->SendRequest每次调用时都重新

    计算authorization header? 希望有人能帮忙解答一下,非常感谢!

     

    GetHttpPage(Cstring ip, Cstring port, CString user, CString pwd)
    {
    CInternetSession iSession("default");
    CHttpConnection* pServer = NULL;
    CHttpFile* pFile = NULL;

    pServer = iSession.GetHttpConnection(ip, port, user, pwd);
    pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, "mypage.html");// Set the url
    pFile->SendRequest();// Make the request
    ...
    ...
    delete pFile;
    delete pServer;
    iSession.Close();
    }

    2008年7月25日 16:02

答案

  • 楼主是使用C#写的这段程序吗?看起来像VC++写的,如果是用VC++,请到Visual C++版发帖,在那里你的问题应该能得到更好的解答。
    2008年7月26日 10:06
    版主