我用下载工具得到的sniffer 信息是:
1:GET /tools/xxx.zip HTTP/1.1
2:Accept: */*
3:Cache-Control: no-cache
4:Connection: Close
5:Host: www.xxx.com
6:Pragma: no-cache
7:Range: byte=38793-
8:Referer:http://www.xxx.com/tools/
9:User-Agent: Mozila/4.0而我自己做的下载程序却是:
1:GET /tools/xxx.zip HTTP/1.1
2:Content:(200 bytes of data)而诸如Accept: */*等信息都在2:Content中。
请问这是什么原因?谢谢!!!大致代码如下:
hConnect = InternetConnect(hOpen,"www.xxx.com",INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
LPCTSTR AcceptTypes = "*/*";
hRequest = HttpOpenRequest(hConnect,"GET","/tools/xxx.zip","HTTP/1.1",NULL,&AcceptTypes, INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_RELOAD,0);
HttpSendRequest(hRequest,NULL,0,NULL,0);

解决方案 »

  1.   

    很明显,你的HttpOpenRequest里边的参数设置的不够多。
    你需要使用HttpAddRequestHeaders把相应的http头添加进去,然后再HttpSendRequest发送!
      

  2.   

    我觉得我提交的信息已经够了啊,比如:"host:www.xxx.com" 信息在InternetConnect中指定了,"Accept: */*"信息在HttpOpenRequest中指定了。我用sniffer查看发现:我指定的这些信息都成为了Content:(200 bytes of data)的内容。为什么呢?如何改正呢?希望各位指点迷津。谢谢!
      

  3.   

    其实你只需要Host信息就可以了
      

  4.   

    我是想问:为什么我的"host:www.xxx.com" "accept */*"等信息会成为Content:(200 bytes of data)的内容,而不是象上面那样一条一条的列出来?(比如说:2:Host:www.xxx.com 3:Accept */*)
      

  5.   

    LPCTSTR AcceptTypes = "*/*\0";
      

  6.   

    AcceptTypes需要的是一个array,因此后面要一个额外的\0
      

  7.   

    加了\0还是没有起作用啊。 "accept */*","host:www.xxx.com"等信息还是Content:(200 bytes of data)中的内容
      

  8.   

    真实代码如下:int CHttpDownloader::StartHttpGet(void)
    {
    DWORD dwFlags;
    InternetGetConnectedState(&dwFlags, 0);
    //1.建立会话
    if(!(dwFlags & INTERNET_CONNECTION_PROXY))
    hOpen = InternetOpen("HttpDownload", INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
    else
    hOpen = InternetOpen("HttpDownload", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if(!hOpen)
    {
    AfxMessageBox("Internet连接错误!");
    return -1;
    }
    //2.建立连接
    CString hostName,fileName;
    ParseURL(hostName,fileName);
    hConnect = InternetConnect(hOpen,hostName,INTERNET_DEFAULT_HTTP_PORT,
    NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
    // 3.初始化下载请求
    LPCTSTR AcceptTypes = "*/*\0";
    hRequest = HttpOpenRequest(hConnect,"GET",fileName,"HTTP/1.1",NULL ,&AcceptTypes, INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_RELOAD,0);
    // 4.发送下载请求
    BOOL ret = HttpSendRequest(hRequest,NULL,0,NULL,0);
    if (!ret)
    {
    CString strErr;
    int i = GetLastError();
    strErr.Format("HttpSendRequest error: %d",i);
    AfxMessageBox(strErr);
    } return 0;
    }// 从URL中提取主机名称和下载文件路径
    void CHttpDownloader::ParseURL(CString& hostName,CString& fileName)
    {
    CString URL = url;
    int i=URL.Find("http://");
    if(i != -1)
    {
    URL = URL.Mid(7);
    }
    i=URL.Find("/");
    hostName = URL.Mid(0, i);
    fileName = URL.Mid(i);
    }
      

  9.   

    每一个头字符串必须以\r\n结束,最后一个头串跟两个换行\r\n\r\n