4

私のコードは HTTP HEAD リクエストを Web サイトに送信します。その後、Web サイトはその情報を返信します。返信の最初の行からステータス コードを抽出するにはどうすればよいですか? ステータス コードは「HTTP/1.0」の後の値で、2xx または 3xx のいずれかです。

コード:

#define BUF_LEN 2048

main(int argc, char *argv[])
{
    int csd;
    struct sockaddr_in server;
    struct hostent *server_host;
    int server_len;
    int string_size;
    short server_port;
    char req_buffer[BUF_LEN];
    char temp_buffer[BUF_LEN];
    char receiveBuffer[BUF_LEN];
    char resource_buffer[BUF_LEN];
    int t;

    if(argc!=2)
    {
        fprintf(stderr,"Usage: %s <website> \n",argv[0]);
        exit(EXIT_FAILURE);
    }

    server_host=gethostbyname(argv[1]);
    if (server_host == NULL)
    {
        herror("While calling gethostbyname()");
        exit(EXIT_FAILURE);
    }

    csd=socket(PF_INET, SOCK_STREAM, 0);
    if(csd<0)
    {
        perror("While calling socket()");
        exit(EXIT_FAILURE);
    }

    server.sin_family=AF_INET;
    memcpy(&server.sin_addr, server_host->h_addr_list[0], server_host->h_length);
    server.sin_port = htons(80);
    server_len=sizeof(server);
    t = connect(csd, (struct sockaddr *) &server, server_len);
    if (t<0)
    {
        perror("while connecting()");
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("connected to server\n\n");
    }

    sprintf(temp_buffer, "HEAD / HTTP/1.0\r\n");
    strcpy(req_buffer, temp_buffer);
    sprintf(temp_buffer, "HOST: %s\r\n", argv[1]);
    strcat(req_buffer, temp_buffer);
    sprintf(temp_buffer, "\r\n");
    strcat(req_buffer, temp_buffer);

    printf(req_buffer);

    write(csd, req_buffer, strlen(req_buffer));

    read(csd, receiveBuffer, BUF_LEN);

    printf(receiveBuffer);

    close(csd);
}
4

3 に答える 3

3
       #include <stdio.h>

       int main()
       {
           char* inputstr = "HTTP/1.0 200";
           int response = 0;
           /
            * On success, the sscanf returns the number of variables filled. 
            * In the case of an input failure before any data could be
            * successfully read, EOF is returned. 
            */
           if(sscanf (inputstr, "HTTP/1.0 %d", &response) == 1)
               printf ("response code %d\n",response);
           else
               printf ("It failed");
           return 0;
      }
于 2016-09-09T10:01:23.253 に答える
0

ライブラリ関数 sscanf()。例:

string the_string = "foo -3.6 fum dum 17";
sscanf(the_string, "foo %f fum dum %d", &f, &i);

命令を構築する方法を正しく理解していなかったため、具体的な例を作成できません

于 2016-09-09T09:45:54.267 に答える