Лучшие способы проанализировать URL с помощью C?

Посмотри, что он тебе говорит. Неожиданный EOF. Это означает, что он пытается найти конец некоторой предыдущей конструкции в вашем коде выше, а не находит его Возможно, неопределенный строковый литерал или функция, в которой отсутствует окончание справа.

Возможно, это недостающее подчеркивание в SURVEY QUESTION.

34
задан Mike Woodhouse 7 April 2009 в 14:48
поделиться

4 ответа

Запишите пользовательский синтаксический анализатор или используйте одну из строковых функций замены для замены разделителя ':' и затем используйте sscanf().

0
ответ дан dirkgently 27 November 2019 в 16:50
поделиться

Лично, я краду HTParse.c модуль от W3C (это используется в веб-браузере рыси, например). Затем можно сделать вещи как:

 strncpy(hostname, HTParse(url, "", PARSE_HOST), size)

Важная вещь о пользовании известной и отлаженной библиотекой состоит в том, что Вы не попадаете в типичные прерывания парсинга URL (много сбоев regexps, когда хост является IP-адресом, например, особенно IPv6 один).

25
ответ дан John Auld 27 November 2019 в 16:50
поделиться

Я написал простой код с помощью sscanf, который может проанализировать очень простые URL.

#include <stdio.h>

int main(void)
{
    const char text[] = "http://192.168.0.2:8888/servlet/rece";
    char ip[100];
    int port = 80;
    char page[100];
    sscanf(text, "http://%99[^:]:%99d/%99[^\n]", ip, &port, page);
    printf("ip = \"%s\"\n", ip);
    printf("port = \"%d\"\n", port);
    printf("page = \"%s\"\n", page);
    return 0;
}

./urlparse
ip = "192.168.0.2"
port = "8888"
page = "servlet/rece"
11
ответ дан Community 27 November 2019 в 16:50
поделиться

С регулярным выражением, если Вы хотите простой способ. Иначе используйте FLEX/бизона.

Вы могли также пользоваться библиотекой парсинга URI

10
ответ дан rici 27 November 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: