#include <stdio.h>
#include <winsock2.h>
#include <windows.h>#pragma comment(lib,"WS2_32.lib")int main()
{
    WSADATA stWsaData;
    ::WSAStartup(MAKEWORD(2,0),&stWsaData);
    SOCKET hSocket = ::socket(AF_INET,SOCK_STREAM,0);
    if(hSocket == INVALID_SOCKET)
    return 0;    sockaddr_in stRemoteAddr;
    stRemoteAddr.sin_family = AF_INET;
    stRemoteAddr.sin_addr.S_un.S_addr = inet_addr("64.233.189.104");
    //64.233.189.104为ping www.google.com得到的IP,暂时懒得写转换IP函数了
    stRemoteAddr.sin_port = htons(80);
    if(::connect(hSocket,(sockaddr *)&stRemoteAddr,sizeof stRemoteAddr) == -1)
return 0;    char cPostData[10000] = {0};
    strcpy(cPostData,"POST /translate_t?langpair=en|zh-CN HTTP/1.1\r\n");
    strcat(cPostData,"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/QVOD, */*\r\n");
    strcat(cPostData,"Referer: http://www.google.cn/language_tools\r\n");
    strcat(cPostData,"Accept-Language: zh-cn\r\n");
    strcat(cPostData,"Content-Type: application/x-www-form-urlencoded\r\n");
    strcat(cPostData,"Accept-Encoding: gzip , deflate\r\n");
    strcat(cPostData,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 2.0.50727)\r\n");
    strcat(cPostData,"Host: translate.google.com\r\n");
    strcat(cPostData,"Content-Length: 46\r\n");
    strcat(cPostData,"Connection: Keep-Alive\r\n");
    strcat(cPostData,"cache-Control: no-cache\r\n");
    strcat(cPostData,"Cookie: __utmc=195145449; __utma=195145449.421253565.1205461371.1205592024.1205592348.11; __utmz=195145449.1205585337.9.8.utmccn=(referral)|utmcsr=hao123.com|utmcct=/ss/fy.htm|utmcmd=referral; __utmb=195145449\r\n\r\n");
    strcat(cPostData,"hl=zh-CN&ie=UTF-8&text=bad&langpair=en%7Czh-CN");

    printf(cPostData);    ::send(hSocket,cPostData,sizeof cPostData,0);
    unsigned char cRecvData[10000] = {0};
    FILE * fp = fopen("C:\D.htm","wb");
    int nRet = ::recv(hSocket,(char *)cRecvData,sizeof cRecvData,0);
    printf("收到了%d数据!",nRet);
    fwrite(cDRecvData,nRet,1,fp);
    fclose(fp);
    
    if(hSocket)
        ::closesocket(hSocket);
    ::WSACleanup();
    return 0;
}听说GOOGLE网站使用的是UTF-8编码,感觉跟这个有关系。查找了一天关于UTF-8的资料,没有头发,就跑来这里寻找高手了。高手帮帮忙啊!!!!!!!!!

解决方案 »

  1.   

     FILE * fp = fopen("C:\D.htm","wb"); 
    C:\D.htm应改为C:\\D.htm
    socket post我没搞过,你可以参考下这贴,用CHttpConnection的,我前段时间弄了个类似的,不过有时候google会要求输入验证码,不会成功http://topic.csdn.net/u/20080214/20/0c9541e3-fd1a-488f-9bcd-c3d05fbb51dd.html
      

  2.   

    Accept-Encoding: gzip , deflate\r\n
    传回来的数据经过压缩的,正常。
    如果你不要自己解压,就把这行去掉
      

  3.   

    1楼的帖子确实不错,很有启发~~~~
    至于你说的UTF-8编码,可以用抓包工具抓取下来看,里面格式包里都有的
      

  4.   

     strcat(cPostData,"Accept-Encoding: gzip , deflate\r\n"); 
    去掉这句
      

  5.   


    搞定了,原来真有压缩。不过原来的代码里的格式也有点问题。多了几个空格,可能是在抓包后处理过程中多出来的。害得我调试不出来。呵呵~~现把可以成功的代码贴出来:
    #include  <stdio.h> 
    #include  <winsock2.h> 
    #include  <windows.h> #pragma comment(lib,"WS2_32.lib") int main() 

        WSADATA stWsaData; 
        ::WSAStartup(MAKEWORD(2,0),&stWsaData); 
        SOCKET hSocket = ::socket(AF_INET,SOCK_STREAM,0); 
        if(hSocket == INVALID_SOCKET) 
        return 0;     sockaddr_in stRemoteAddr; 
        stRemoteAddr.sin_family = AF_INET; 
        stRemoteAddr.sin_addr.S_un.S_addr = inet_addr("64.233.189.104"); 
        //64.233.189.104为ping www.google.com得到的IP,暂时懒得写转换IP函数了 
        stRemoteAddr.sin_port = htons(80); 
        if(::connect(hSocket,(sockaddr *)&stRemoteAddr,sizeof stRemoteAddr) == -1) 
    return 0;     char cPostData[10000] = {0}; 
        strcpy(cPostData,"POST /translate_t?langpair=en|zh-CN HTTP/1.1\r\n"); 
        strcat(cPostData,"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/QVOD, */*\r\n"); 
        strcat(cPostData,"Referer: http://www.google.cn/language_tools\r\n"); 
        strcat(cPostData,"Accept-Language: zh-cn\r\n"); 
        strcat(cPostData,"Content-Type: application/x-www-form-urlencoded\r\n"); 
        //strcat(cPostData,"Accept-Encoding: gzip , deflate\r\n"); 
        strcat(cPostData,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 2.0.50727)\r\n"); 
        strcat(cPostData,"Host: translate.google.com\r\n"); 
        strcat(cPostData,"Content-Length: 46\r\n"); 
        strcat(cPostData,"Connection: Keep-Alive\r\n"); 
        strcat(cPostData,"cache-Control: no-cache\r\n"); 
        strcat(cPostData,"Cookie: __utmc=195145449; __utma=195145449.421253565.1205461371.1205592024.1205592348.11; __utmz=195145449.1205585337.9.8.utmccn=(referral)|utmcsr=hao123.com|utmcct=/ss/fy.htm|utmcmd=referral; __utmb=195145449\r\n\r\n"); 
        strcat(cPostData,"hl=zh-CN&ie=UTF-8&text=bad&langpair=en%7Czh-CN\r\n");     printf(cPostData);     ::send(hSocket,cPostData,sizeof cPostData,0); 
        unsigned char cRecvData[10000] = {0}; 
        FILE * fp = fopen("C:\\D.htm","wb"); 
        int nRet = ::recv(hSocket,(char *)cRecvData,sizeof cRecvData,0); 
        printf("收到了%d数据!",nRet); 
        fwrite(cRecvData,nRet,1,fp); 
    fclose(fp); 
         
        if(hSocket) 
            ::closesocket(hSocket); 
        ::WSACleanup(); 
        return 0;