VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 603|回复: 3

[求助] 关于WINHTTP 问题。

[复制链接]
33_avatar_middle
在线会员 发表于 2016-5-3 12:37:06 | 显示全部楼层 |阅读模式
3驿站币
#include <stdio.h>
#include <memory.h>
#include <windows.h>
#include <winhttp.h>
#pragma comment (lib, "winhttp")

#define URL L"/do.php?ac=looogoion&&ref"
char DATA[256] = "username=XXXXXX&password=XXXXXX&refer=space.php%3Fdo%3Dhome&loginsubmit=%B5%C7%C2%BC&formhash=fd7733d3";
char Cookies[256] = { 0 };
int main()
{
        HINTERNET hSession = NULL, hConnect = NULL, hRequest;
        char *RECVBUF = NULL;
        DWORD WORDRECV, Number = 0, dwSize = 0, dwIndex = 0;
        hSession = WinHttpOpen(L"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
        if (hSession)
        {
        //        printf("hSession\n");
                hConnect = WinHttpConnect(hSession, L"www.youxiren.cn", INTERNET_DEFAULT_HTTP_PORT, 0);
        }
        if (hConnect)
        {
        //        printf("WinHttpConnect\n");
                hRequest = WinHttpOpenRequest(hConnect, L"POST", URL, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
        }
        if (hRequest)
        {

                WinHttpAddRequestHeaders(hRequest, L"Content-Type: application/x-www-form-urlencoded", strlen("Content-Type: application/x-www-form-urlencoded"), WINHTTP_ADDREQ_FLAG_ADD);
        //        printf("WinHttpOpenRequest\n");
        //        WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_COOKIE, WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize, &dwIndex);
                if (WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, DATA, strlen(DATA), strlen(DATA), 0))
                {
                //        printf("WinHttpSendRequest\n");
                        if (WinHttpReceiveResponse(hRequest, NULL))
                        {
                //                WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_COOKIE, WINHTTP_HEADER_NAME_BY_INDEX, Cookies, &dwSize, &dwIndex);
                //                printf("WinHttpReceiveResponse\n");
                                do
                                {
                                        WORDRECV = 0;
                                        if (WinHttpQueryDataAvailable(hRequest, &WORDRECV))
                                        {
                        //                        printf("WinHttpQueryDataAvailable\n");
                        //                        printf("%d\n", WORDRECV);
                                                RECVBUF = (char *)malloc(WORDRECV + 1);
                                                memset(RECVBUF, 0, WORDRECV + 1);
                                                WinHttpReadData(hRequest, RECVBUF, WORDRECV, &Number);
                                                printf("%s", RECVBUF);
                                                free(RECVBUF);
                                        }
                                } while (WORDRECV > 0);
                        }
                }
        }
//        printf("%s\n", Cookies);
        WinHttpCloseHandle(hRequest);
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hSession);
        return 0;
}
以上是网站POST,已经可以正常POST数据并成功返回,但是怎么控制COOKIE呢?怎么接收并保存服务器给传来的COOKIE方便下次使用呢?





上一篇:在工作线程创建的Socket收到数据后,如何在View视图里划出曲线轨迹?
下一篇:关于视图类指针的获取问题
51_avatar_middle
online_admins 发表于 2016-5-3 16:02:12 | 显示全部楼层
Cookie 会自动管理的,如果还用这个 Winhttp对象的话就不用管,因为下次再次发送请求的时候他会自动带上的,如果想要保存下来可以调用 WinHttpReadData 或者 WinHttpQueryHeaders 得到服务器返回的 HTTP 应答头中的 Cookie 信息
33_avatar_middle
ico_lz  楼主| 发表于 2016-5-3 22:44:46 | 显示全部楼层
Syc 发表于 2016-5-3 16:02
Cookie 会自动管理的,如果还用这个 Winhttp对象的话就不用管,因为下次再次发送请求的时候他会自动带上的 ...

if (WinHttpReceiveResponse(hRequest, NULL))
{
        WinHttpQueryHeaders(hRequest,    WINHTTP_QUERY_RAW_HEADERS,WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize,WINHTTP_NO_HEADER_INDEX);
                if (GetLastError( ) == ERROR_INSUFFICIENT_BUFFER)
                {
                        WinHttpReadData(hRequest, Cookies, dwSize, NULL);
                        printf("%s\n", Cookies);
                }
}
大神,我这个样子依然无法获取到响应头啊,得到的却是网页部分数据,还请指点下。
33_avatar_middle
ico_lz  楼主| 发表于 2016-5-6 14:53:51 | 显示全部楼层
Syc 发表于 2016-5-3 16:02
Cookie 会自动管理的,如果还用这个 Winhttp对象的话就不用管,因为下次再次发送请求的时候他会自动带上的 ...

弄清楚COOKIE和获取响应头了,多谢指点提醒。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-19 09:26

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表