C - 如何从char缓冲区中提取数字?

时间:2016-09-09 09:39:32

标签: c http-head

我的代码向网站发送HTTP HEAD请求。然后该网站回复其信息。如何从回复的第一行中提取状态代码?状态代码是“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);
}

3 个答案:

答案 0 :(得分:3)

var a=10;
var b=20;
$.post('abc.php',{param1:a,param2:b},function(data){
 //here action on data returned or anything
});

答案 1 :(得分:0)

库函数sscanf()。例如:

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

我无法做出具体的例子,因为我不明白如何建立指令

答案 2 :(得分:0)

您可以使用curl.h

#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        CURLcode res;
        FILE *f = fopen("/dev/null", "wb");
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, f);
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
        res = curl_easy_perform(curl);
        if (res == CURLE_OK) {
            long response_code;
            curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
            printf("response_code %ld", response_code);
        }
        curl_easy_cleanup(curl);
    }
    return 0;
}

测试

gcc main.c -lcurl
./a.out
response_code 200⏎