이것은 결코 끝나지 않을 문제입니다. 이 작업은 웹 서버에서 요청 라인을 구문 분석하는 것입니다. - 불확실한 길이의 C. - C에서 다음과 같이 웹에서 다음과 같은 작업을 수행합니다. /path/script.cgi
쿼리 : ?field1=value1&field2=value2
C에서 HTTP 요청 라인 구문 분석
GET /path/script.cgi?field1=value1&field2=value2 HTTP/1.1
나는 절대 경로를 추출해야합니다. 다음 기능이 키를 보유하고 있다고 들었습니다 : strchr
, strcpy
, strncmp
, strncpy
및/또는 strstr
.
지금까지 무슨 일이 있었는지 : strchr
및 strstr
과 같은 기능을 사용하면 특정 시점에 요청 줄을 자르도록 허용하지만 결코 요청 줄의 일부를 제거하지 않을 것임을 배웠습니다. 원하지 않아요. 어떻게 레이어링하든 상관 없습니다.
예를 들어, 다음은 쿼리 분리에 가까운 코드이지만 http 버전을 제거 할 수 없습니다.
bool parse(const char* line)
{
// request line w/o method
const char ch = '/';
char* lineptr = strchr(line, ch);
// request line w/ query and HTTP version
char ch_1 = '?';
char* lineptr_1 = strchr(lineptr, ch_1);
// request line w/o query
char ch_2 = ' ';
char* lineptr_2 = strchr(lineptr_1, ch_2);
printf("%s\n", lineptr_2);
if (lineptr_2 != NULL)
return true;
else
return false;
}
없이 내가 절대 경로를 분리하려고 비슷한 문제를 가지고 말 (나는 방법을 도랑 아닌? 또는 아무것도 이후 수), 나는 어떤 기회가있는 나는 기능을 사용할 수 없습니다 참조 그게 나를 알 필요가 선험적으로 하나의 위치 (일반적으로 배열)에서 다른 곳으로 복사하고 싶습니다 얼마나 많은 문자가 실시간으로 실행될 때, 나는 요청 줄이 어떻게 생겼는지 전혀 모른다. 미리. 누군가 내가 누락 된 것을보고 올바른 방향으로 나를 가리킬 수 있다면, 나는 가장 감사 할 것입니다!
심볼, 공백 또는 개행까지 구문 분석 할 수있는 함수를 직접 작성하지 않으시겠습니까? 그런 다음이 함수를 사용하여 절대 경로 (첫 번째 '?'또는 '\ n'또는 ''까지 구문 분석)를 사용하고 같은 함수를 다시 사용할 수 있습니다. 시작 인덱스는 절대 문자의 마지막 문자 인덱스입니다. 경로 더하기 1을 사용하여 쿼리 문자열을 가져옵니다. –
좋은 생각입니다. 그렇게해야 할 수도 있습니다. 물론, 내가 마지막으로 시도했을 때 나는 strcpy를 재발 명했다. lol – Ryan
프로그래밍의 아름다움, 특히 C와 같은 저수준 언어에서의 아름다움. 필요한 것이 있으면 존재하지 않는다면 그것을 만들 수 있습니다! –