none
SOCKET工程构造HTTP头问题 RRS feed

  • 问题

  • Hi,各位,
    我在做一个小工程的时候,需要socket读取静态页面的source code,

    #include "stdafx.h"
    
    #include <iostream> 
    
    #include <winsock.h> 
    
    #include <string> 
    
    #pragma comment(lib, "ws2_32.lib") 
    
    using namespace std;
    
    
    
    void main()
    
    {
    
        struct hostent *pURL;
    
        struct sockaddr_in addr; 
    
        WSADATA WSAData={0}; 
    
        SOCKET sockfd; 
    
        string header;
    
        static char text[BUFSIZ];
    
    
    
        WSAStartup(MAKEWORD(2,2), &WSAData);
    
        sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 
    
        pURL = gethostbyname("www.zhan3.cn/*www.baidu.com*/"); 
    
        addr.sin_family = AF_INET; 
    
        addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr); 
    
        addr.sin_port = htons(80);
    
        connect(sockfd,(SOCKADDR *)&addr,sizeof(addr));
    
        //header="GET ";
    
        //header.append("/");
    
        //header.append(" HTTP/1.1\r\n");
    
        //header.append("HOST: ");
    
        //header.append("www.baidu.com");
    
        //header.append("\r\nConnection: Close\r\n\r\n");
    
            const  char* message = "GET http://www.zhan3.cn/update.htm HTTP/1.1\r\n"
    
                                "Accept-Language: en-us\r\n"
    
                                "User-Agent: Mozilla/4.0\r\n" 
    
                                "Accept-Encoding: gzip, deflate\r\n"
    
                                "Proxy-Connection: Keep-Alive\r\n"
    
                                "Host: www.zhan3.cn\r\n"
    
                                "Cookie: AJSTAT_ok_times=1\r\n\r\n";
    
    
    
        send(sockfd, message, strlen(message), 0);
    
    
    
        while (recv(sockfd, text, BUFSIZ, 0) != NULL) 
    
        { 
    
            cout<<text<<endl;
    
            strnset(text, '\0', BUFSIZ); 
    
        } 
    
        closesocket(sockfd); 
    
        WSACleanup(); 
    
    }
    
    
    使用注释代码可以访问百度,但是当我修改代码,访问我静态页面时候,一直提示404错误或者500(提示说,URL不对),这肯定是我构造httphead问题,

    我修改get 哪行 一下午了,还是不行,求助下
    • 已编辑 Jerry_yu 2010年1月22日 8:45
    2010年1月21日 13:25

答案

  • HTTP头应为:
    GET /update.htm HTTP/1.1
    Host: www.zhan3.cn
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.1.7)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive

    请注意:
    GET /update.htm HTTP/1.1
    Host: www.zhan3.cn

    主要是黑体部分你没有写对。

    我试着访问了一下 http://www.zhan3.cn/update.htm, 确实是找不到资源404 error!
    下面是回应:
    HTTP/1.x 404 Not Found
    Content-Type: text/html
    Server: Microsoft-IIS/7.0
    X-Powered-By: ASP.NET
    Date: Thu, 21 Jan 2010 14:08:21 GMT
    Content-Length: 1706

    应该是你HTTP header 有问题,服务器上的页面也有问题。
    • 已标记为答案 Jerry_yu 2010年1月22日 8:45
    • 取消答案标记 Jerry_yu 2010年1月22日 8:45
    • 已标记为答案 Jerry_yu 2010年1月22日 8:45
    2010年1月21日 14:12
    版主

全部回复

  • HTTP头应为:
    GET /update.htm HTTP/1.1
    Host: www.zhan3.cn
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.1.7)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive

    请注意:
    GET /update.htm HTTP/1.1
    Host: www.zhan3.cn

    主要是黑体部分你没有写对。

    我试着访问了一下 http://www.zhan3.cn/update.htm, 确实是找不到资源404 error!
    下面是回应:
    HTTP/1.x 404 Not Found
    Content-Type: text/html
    Server: Microsoft-IIS/7.0
    X-Powered-By: ASP.NET
    Date: Thu, 21 Jan 2010 14:08:21 GMT
    Content-Length: 1706

    应该是你HTTP header 有问题,服务器上的页面也有问题。
    • 已标记为答案 Jerry_yu 2010年1月22日 8:45
    • 取消答案标记 Jerry_yu 2010年1月22日 8:45
    • 已标记为答案 Jerry_yu 2010年1月22日 8:45
    2010年1月21日 14:12
    版主
  • 可是IE可以。郁闷

    2010年1月22日 11:24
  • 这跟用什么浏览器没太大关系,IE访问
    http://www.zhan3.cn/update.htm
    
    也是404 Error 呀。

    2010年1月23日 0:28
    版主