none
如何接收HTTP应答报文? RRS feed

  • 问题

  • 我用HTTP Post 方法传送了一些图片到一个网站上,等待网站的应答报文,如何接收到?并且分析其中附加的文字信息?
    2011年7月6日 6:52

答案

  • CHttpFile::QueryInfo()

    Call this member function to return response or request headers from an HTTP request.
    详细用法请参看MSDN文档
    http://msdn.microsoft.com/zh-cn/library/84d9ybyh(v=vs.80).aspx


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Ptolemaeus 2011年7月7日 4:08
    2011年7月7日 0:15
    版主
  • 最后

    我是这样解决的
    char dwStatus[11000];//大小由你的内容大小决定QuerInfo你能查的
      DWORD dwBuffLen = sizeof(dwStatus);
      pHTTP->Read(&dwStatus,dwBuffLen);//此后pHTTP里就是你要的内容了。pHTTP是CHttpFile型的

    • 已标记为答案 Ptolemaeus 2011年7月7日 4:08
    2011年7月7日 4:08

全部回复

  • 我已经用HTTP Post发送了一些图片到某网站,该网站会返回一个http 200的应答报文,我怎么在我的程序里接收这个电文,并且分析其中附加的信息呢?

     

    发送的程序基本如下

    pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
      pHTTP = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
      pHTTP->AddRequestHeaders(strRequestHeader);
      pHTTP->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE);

    就是用这类方法发出去的,用什么接收呢?recv?该怎么用呢?

    2011年7月6日 6:57
  • CHttpFile::QueryInfo()

    Call this member function to return response or request headers from an HTTP request.
    详细用法请参看MSDN文档
    http://msdn.microsoft.com/zh-cn/library/84d9ybyh(v=vs.80).aspx


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Ptolemaeus 2011年7月7日 4:08
    2011年7月7日 0:15
    版主
  • 看了您的指导后,我是这样写的,

    pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
    pHTTP = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
    pHTTP->AddRequestHeaders(strRequestHeader);
    pHTTP->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE);

    .

    .

    .

    DWORD dwStatus=0;
    DWORD dwBuffLen = sizeof(dwStatus);
    DWORD dwIndex = HTTP_QUERY_CONTENT_LENGTH;
    pHTTP->QueryInfo(HTTP_QUERY_URI,(void*)&dwStatus,&dwBuffLen,&dwIndex);
    pHTTP->EndRequest(HSR_SYNC);

    但dwStatus里的值就没变过,一直是0,是怎么回事啊?

    2011年7月7日 1:20
  • pHTTP->QueryInfo(HTTP_QUERY_URI,(void*)&dwStatus,&dwBuffLen,&dwIndex);
    用getlasterror()取上一行代码的异常,返回12019
    是不是我的pHTTP用的不对,应该单独定义一个CHttpFile类型的对象,用这个对象去接收下返回的报文?
    如何接收返回报文呢?

    ps:
    ERROR_INTERNET_INCORRECT_HANDLE_STATE
    12019

    The requested operation cannot be carried out because the handle supplied is not in the correct state.

    2011年7月7日 1:35
  •   后来我改成这样:

    //代码省略

    pHTTP->EndRequest(HSR_SYNC);
    DWORD dwStatus=0;
    DWORD dwBuffLen = sizeof(dwStatus);
    int ErrorMsg = pHTTP->QueryInfo(HTTP_QUERY_STATUS_TEXT,(void*)&dwStatus,&dwBuffLen);
    int ErrorStas = GetLastError();
    cout <<dwStatus<<"."<<endl;

    这里dwStatus得到了值,getlasterror也没报错,但我的返回报文里是一个很长的字符串,我怎么取到呢?

    QueryInfo当参数是CString好像有bug,总是报assert错误

    2011年7月7日 1:50
  • 现在可以取到一些信息了,但是他的电文里有line-based text data

    这部分内容用什么取完呢?

    2011年7月7日 2:15
  • 最后

    我是这样解决的
    char dwStatus[11000];//大小由你的内容大小决定QuerInfo你能查的
      DWORD dwBuffLen = sizeof(dwStatus);
      pHTTP->Read(&dwStatus,dwBuffLen);//此后pHTTP里就是你要的内容了。pHTTP是CHttpFile型的

    • 已标记为答案 Ptolemaeus 2011年7月7日 4:08
    2011年7月7日 4:08