将API密钥发送到站点并获取返回值

时间:2018-04-06 15:50:54

标签: c http get

我正在开发一个应用程序,我试图通过向我的网站发送带有应用程序版本控制的API密钥来“许可”它,并获得该网页的返回值。

用户打开应用程序 - >应用程序向Web服务器发送带有2个值的GET请求:?authkey=[key]&v=1.00 - >抓住返回值

我试图解决这个问题,但似乎总是失败了。这是我目前所在的地方:

char buffer[1024] =
    "GET / HTTP/1.1\r\n"
    "Host: example.com\r\n"
    "Accept-Language: en-US,en;q=0.5\r\n"
    "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0\r\n"
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    "Connection: keep-alive\r\n"
    "Cache-Control: max-age=0\r\n\r\n";

size_t buffer_len = sizeof(buffer) - 1;

n = write(sockfd, buffer, buffer_len);

bzero(buffer, strlen(buffer));
n = read(sockfd, buffer, buffer_len);

printf("%s\n",buffer);

sysNotify(buffer);

// if(buffer == "valid") // continue?

但我不知道如何发送GET请求,以及如何比较之后的返回值。

如果有人愿意帮助我,那将非常感激。

1 个答案:

答案 0 :(得分:0)

首先,您从未在GET请求中指定查询字符串,因此buffer应该更像:

char buffer[1024];
char query_string[1024];
...
sprintf(query_string, "?authkey=%s&v=1.00", key);
... 
sprintf(buffer,
    "GET /%s HTTP/1.1\r\n"
    "Host: example.com\r\n"
    "Accept-Language: en-US,en;q=0.5\r\n"
    "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0\r\n"
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    "Connection: keep-alive\r\n"
    "Cache-Control: max-age=0\r\n\r\n",
    query_string);

其次,在TCP连接上写入之前似乎没有连接(或者你可能但是没有发布该代码);在你写作之前你应该这样做:

if (connect(sockfd, (struct sockaddr*)&sockaddr_in, sizeof(sockaddr_in)) == -1) {
        exit(EXIT_FAILURE);
}

在C中有一些GET工作实现,你可以查看SO,如this one