我正在开发一个应用程序,我试图通过向我的网站发送带有应用程序版本控制的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请求,以及如何比较之后的返回值。
如果有人愿意帮助我,那将非常感激。
答案 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。