我在做一个msn的客户端,以前没做过winInet,被认证搞晕了!现在要发送一个请求到loginnet.passport.com,就是这样一个请求:
<o> Client connects to loginnet.passport.com, port 443>>> GET /login2.srf HTTP/1.1\r\n
>>> Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=example%40passport.com,pwd=password,lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1062764229,kpp=1,kv=5,ver=2.1.0173.1,tpf=43f8a4c8ed940c04e3740be46c4d1619\r\n
>>> Host: loginnet.passport.com\r\n\r\n我是这样写的:
connect to server....OK
m_hRequest = HttpOpenRequest(m_hSession, 
"GET",
"login2.srf",
NULL,
NULL,
NULL,
INTERNET_FLAG_SECURE, 
m_ReqID);
///这个函数做完,错误号是122
char* pAuthString = "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=kitty_wangwl%40hotmail.com,pwd=654321,lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1111055424,kpp=1,kv=5,ver=2.1.6000.1,tpf=e880647cbbe67667018f7c8fc6224aec\r\nHost: loginnet.passport.com\r\n\r\n;HttpSendRequest(m_hRequest, pAuthString, strlen(pAuthString), NULL, 0);
....运行没有问题,但是最后没有应答信息回来!我不知道是不是我请求发得不对。我在IE里可以打开
loginnet.passport.com/login2.srf还有一个问题,哪里有VC里面可用的URLEncode和URLDecode函数呢?

解决方案 »

  1.   

    发送的请求还要包括http的标准头结构,在最前面。Encode和Decode是base64编码的编码和解码函数,C++没有现成的函数,需要自己实现,关于base64的代码网上很多
      

  2.   

    orbit(吹泡泡的小猫)谢谢。不过我还是没搞懂^_^
    1。标准头怎么写呢?有些什么内容?
    2。BASE64与URL编码是一样的?那我可以直接拿base64的过来用
      

  3.   

    返回bad request invalid head name是什么原因?好像我的head填得都对啊
      

  4.   

    用winient不用考虑编码!你只要甜对值就可以了
      

  5.   

    哦,原来如此。。我不用SSL,用sniffer看了一下,其实我是得到了应答,而且得到了三个应答,我想要的是读第一个应答,但我用InternetReadFile总是得到第三个应答,而这个应答是个"\r\n".
    我如何能读到第一个应答呢?