有一个网站http://www.zhulang.com/,小说站点,我想要用VC提取我指定的一部小说的内容,比如金庸的《鹿鼎记》,我现在要提交POST表单,我的程序代码如下,返回不正确,我的代码可能是头文件写错了,哪位高手帮我看看:这个头文件怎么写?
CHttpDownDemoDlg *pDlg=(CHttpDownDemoDlg*)lpParam;
CString strRequest="";
//strRequest+=pDlg->m_name;
strRequest+="action=action&key=鹿鼎记"; //这里写错了吧??哪位高手给看看,这个头文件该怎么写??谢谢
CString strServerName="www.zhulang.com";
CString strObjectName="/search.php";
INTERNET_PORT nPort=80;
CString strResponse="";
CInternetSession session("HttpSession");
CHttpConnection *pServer=NULL;
CHttpFile *pFile=NULL;
try
{
pServer=session.GetHttpConnection(strServerName,nPort);
pFile=pServer->OpenRequest(0,strObjectName);
char szHeaders[100];
memset(szHeaders,0,sizeof(szHeaders));
strcpy(szHeaders,"Accept: text*//*\r\nContent-Type: application/x-www-form-urlencoded");
pFile->AddRequestHeaders(szHeaders);

pFile->SendRequestEx(strRequest.GetLength());
pFile->WriteString(strRequest);
pFile->EndRequest();
DWORD dwRet=0;
pFile->QueryInfoStatusCode(dwRet);

char szBuf[1024];
memset(szBuf,0,sizeof(szBuf));
if(dwRet!=HTTP_STATUS_OK)
{
UINT nRead;
do 
{
nRead=pFile->Read(szBuf,1023);
if(nRead!=0)
{
szBuf[nRead]=0;
strResponse+=szBuf;
}
} while(nRead!=0);
}
delete pFile;
delete pServer;
}
catch(CInternetException *pEx)
{
AfxMessageBox("ÍøÂçÒì³££¬ÇëÏȼì²âÍøÂ磡");
}
AfxMessageBox(strResponse);哪位大侠给看看??

解决方案 »

  1.   

    strRequest += "action=action&key=";
    strRequest += UrlEscape("鹿鼎记"); 
      

  2.   

    CHttpDownDemoDlg *pDlg=(CHttpDownDemoDlg*)lpParam;
    CString strRequest="";
    //strRequest+=pDlg->m_name;
    strRequest+=_T("action=action&sType=&classa=&classb=key=");
    strRequest+=_T("鹿鼎记"); 
    CString strServerName=_T("www.zhulang.com");
    CString strObjectName=_T("/search.php");
    INTERNET_PORT nPort=80;
    CString strResponse=_T("");
    CInternetSession session(_T("HttpSession"));
    CHttpConnection *pServer=NULL;
    CHttpFile *pFile=NULL;
    try
    {
    pServer=session.GetHttpConnection(strServerName,nPort);
    pFile=pServer->OpenRequest(0,strObjectName);
    char szHeaders[100];
    memset(szHeaders,0,sizeof(szHeaders));
    strcpy(szHeaders,_T("Accept: text*//*\r\nContent-Type: application/x-www-form-urlencoded"));
    pFile->AddRequestHeaders(szHeaders);

    pFile->SendRequestEx(strRequest.GetLength());
    pFile->WriteString(strRequest);
    pFile->EndRequest();
    DWORD dwRet=0;
    pFile->QueryInfoStatusCode(dwRet);

    char szBuf[1024];
    memset(szBuf,0,sizeof(szBuf));
    if(dwRet==HTTP_STATUS_OK)
    {
    UINT nRead;
    while((nRead=pFile->Read(szBuf,1023))>0)   
    {   
    strResponse+=CString(szBuf,nRead);   
    }   
    }  
    delete pFile;
    delete pServer;
    }
    catch(CInternetException* e)
    {   
    CString str;   
    str.Format("Internet Exception\r\nm_dwError%u,m_dwContextError%u",e->m_dwError,e->m_dwContext);   
    AfxMessageBox(str);
    }
    AfxMessageBox(strResponse); 修改成这样以后,返回的页面是乱码?哪位大侠给指点一下!
      

  3.   

    看看页面的编码是什么,utf8还是gb2312,是否返回的为gzip压缩形式?
      

  4.   

    判断一下是否有BOM信息,如果有就按照BOM转换,没有就按照utf-8解码
      

  5.   

    我现在已经将UTF-8转成了GB2312了,现在的问题是没有返回我想要的搜索页面的结果,返回的是搜索出错的结果,这个小说的网站上有多个form,在我提交的strRequest是不是都要赋一定的值呢?
      

  6.   

    提交可以了,还有一点问题就是我要查找的,比如说要找鹿鼎记这本小说,是不是要将鹿鼎记这三个字转成UTF-8格式以后,再Base64编码呢??,那个小说站是utf-8格式编码的!
      

  7.   

    可能网页POST时候 需要把中文转换成 %xx%yy%zz 的形式,我不知道这种形式叫做啥,但xxyyzz就是utf-8的3位,只是把每一位拆开前面加了个%, 你可以用sockmon抓包一下看看
      

  8.   

    sType=a1&classa=&classb=&key=%E9%B9%BF%E9%BC%8E%E8%AE%B0&%E6%8F%90%E4%BA%A4=%E6%90%9C%E7%B4%A2&action=action上面的是用sniffer抓的包上面的这个就是提交的5个参数,那个Key=后面的就是要查找的鹿鼎记三个字,不知道上面是怎么转的?
      

  9.   


    这种就叫URL编码,或者叫URL安全编码,跟utf-8完全是两回事。
      

  10.   

    请问一下楼上的,这种是怎么转换的呢?正在做这个,网上大多是用ASP,PHP写的,看不懂的,有没有用C++写的呢?