msdn上说通过queryinfo函数可以接受到请求中的回答或者请求头,第一个参数要怎么设才能取得response的内容呢?试了半天没弄出来

解决方案 »

  1.   

    CHttpFile::QueryInfo   BOOL QueryInfo( DWORD dwInfoLevel, LPVOID lpvBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex = NULL ) const;   BOOL QueryInfo( DWORD dwInfoLevel, CString& str, LPDWORD dwIndex = NULL) const;   BOOL QueryInfo( DWORD dwInfoLevel, SYSTEMTIME* pSysTime, LPDWORD dwIndex = NULL ) const;   返回值:   如果成功,则返回非零值,否则为0。如果此调用失败,可通过调用Win32的函数GetLastError来确定错误原因。   参数: dwInfoLevel 查询属性和下列指定所须信息标志的组合: · HTTP_QUERY_CUSTOM 查找头名称并在输出中返回lpvBuffer中的值。如果未找到,HTTP_QUERY_CUSTOM 产生断言。   · HTTP_QUERY_FLAG_REQUEST_HEADERS 是典型的,此应用查询请求头,但一个应用也可通过使用此标记查询请求头。   · HTTP_QUERY_FLAG_SYSTEMTIME 对于那些值为日期/时间字符串的头,如“Last-Modified-Time”,此标记返回如标准Win32SYSTEMTIME结构的头值,而不需应用对数据进行文法分析映射。如果使用了此标记,你可能要使用SYSTEMTIME 覆盖此函数。   · HTTP_QUERY_FLAG_NUMBER 对于那些值为数字的头,如状态号,此标记返回一个32位的数据。   请参阅说明部分以了解可能值的列表。   lpvBuffer 一个指向用于接收信息的缓冲区的指针。   lpdwBufferLength 在入口处,这是指向一个用字节或位表示的包含数据缓冲区长度的值。请参阅说明部分以了解此参数的详细信息。   lpdwIndex 一个指向基于零的头索引的指针。可以为NULL。使用此标记来枚举同名的多个头。对于输入,lpdwIndex表示返回的指定的头的索引。对于输出,lpdwIndex 表示下一个头的索引。如果此索引找不到,则返回ERROR_HTTP_HEADER_NOT_FOUND。   str 接收返回信息的CString对象的参考值。   dwIndex 一个索引值。请参阅lpdwIndex。   pSysTime 一个指向Win32 SYSTEMTIME结构的指针。   说明:   调用此成员函数返回HTTP请求中的回答或请求头。只有在SendRequest被成功调用或者一个CHttpFile对象被 OpenURL成功创建后,才能使用该成员函数。   你可从QueryInfo中获取以下数据类型: · strings (缺省)   · SYSTEMTIME (对于“Data:”“Expires:”等)   · DWORD (对于 STATUS_CODE,CONTENT_LENGTH等等)   当一个字符串被写入缓冲区,且成员函数成功时,lpdwBufferLength 包含字符串的字节长减一,去掉结束NULL字符的长度。   可能的dwInfoLevel值包括: · HTTP_QUERY_MIME_VERSION   · HTTP_QUERY_CONTENT_TYPE   · HTTP_QUERY_CONTENT_TRANSFER_ENCODING   · HTTP_QUERY_CONTENT_ID   · HTTP_QUERY_CONTENT_DESCRIPTION   · HTTP_QUERY_CONTENT_LENGTH   · HTTP_QUERY_ALLOWED_METHODS   · HTTP_QUERY_PUBLIC_METHODS   · HTTP_QUERY_DATE   · HTTP_QUERY_EXPIRES   · HTTP_QUERY_LAST_MODIFIED   · HTTP_QUERY_MESSAGE_ID   · HTTP_QUERY_URI   · HTTP_QUERY_DERIVED_FROM   · HTTP_QUERY_LANGUAGE   · HTTP_QUERY_COST   · HTTP_QUERY_WWW_LINK   · HTTP_QUERY_PRAGMA   · HTTP_QUERY_VERSION   · HTTP_QUERY_STATUS_CODE   · HTTP_QUERY_STATUS_TEXT   · HTTP_QUERY_RAW_HEADERS   · HTTP_QUERY_RAW_HEADERS_CRLF
      

  2.   


    hSession = ::InternetOpen( DEFAULT_AGENT_NAME, PRE_CONFIG_INTERNET_ACCESS, _T(""), INTERNET_INVALID_PORT_NUMBER, 0 );
    if ( hSession )
    {
    hHttpFile = ::InternetOpenUrl( hSession, pstThread->pszUrl, NULL, 0, INTERNET_FLAG_EXISTING_CONNECT, 0 );
    if ( hHttpFile )
    {
    // 得到状态码
    dwQueryBufLen = sizeof(szQueryBuf);
    bQuerySucc = ::HttpQueryInfo
    (
    hHttpFile,
    HTTP_QUERY_STATUS_CODE,
    szQueryBuf,
    &dwQueryBufLen,
    NULL
    );
    if ( bQuerySucc && _tcslen(szQueryBuf) > 0 )
    {
    pstThread->dwRet = (DWORD)_ttol(szQueryBuf);
    } ::InternetCloseHandle( hHttpFile );
    } ::InternetCloseHandle( hSession );
    }