面试题答案
一键面试#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_REQUEST_SIZE 1024
#define MAX_HEADERS 10
#define MAX_HEADER_LENGTH 100
#define MAX_URL_LENGTH 200
void parseHttpGetRequest(const char *request, char *url, char (*headers)[MAX_HEADER_LENGTH]) {
const char *p = request;
// 提取URL
if (strncmp(p, "GET ", 4) == 0) {
p += 4;
const char *endUrl = strstr(p, " HTTP/1.1\r\n");
if (endUrl) {
size_t urlLength = endUrl - p;
if (urlLength < MAX_URL_LENGTH) {
strncpy(url, p, urlLength);
url[urlLength] = '\0';
}
}
}
// 提取头部信息
p = strstr(request, "\r\n");
if (p) {
p += 2;
int headerCount = 0;
while (headerCount < MAX_HEADERS && strncmp(p, "\r\n", 2) != 0) {
const char *endHeader = strstr(p, "\r\n");
if (endHeader) {
size_t headerLength = endHeader - p;
if (headerLength < MAX_HEADER_LENGTH) {
strncpy(headers[headerCount], p, headerLength);
headers[headerCount][headerLength] = '\0';
headerCount++;
}
}
p = endHeader + 2;
}
}
}
你可以这样调用这个函数:
int main() {
char request[MAX_REQUEST_SIZE] = "GET /index.html HTTP/1.1\r\n"
"Host: example.com\r\n"
"User - Agent: Mozilla/5.0\r\n"
"\r\n";
char url[MAX_URL_LENGTH];
char headers[MAX_HEADERS][MAX_HEADER_LENGTH];
parseHttpGetRequest(request, url, headers);
printf("URL: %s\n", url);
for (int i = 0; i < MAX_HEADERS && headers[i][0] != '\0'; i++) {
printf("Header %d: %s\n", i + 1, headers[i]);
}
return 0;
}