LINUX.ORG.RU

[sockets][http] Чтение POSTов.


0

1

Есть код:

void systemRun(serverInformation server){
    int listenfd;
    int connfd;
    struct sockaddr_in clientaddr;
    int clientlen;
    char *buf;
    buf = malloc(100000);
    listenfd = openListen(40000);
    printf("%d\n",listenfd);
    printf("%d\n",SERVER_IS_ACTIVE);
    while (SERVER_IS_ACTIVE){
        clientlen = sizeof(clientaddr);
        connfd = accept(listenfd, (SA *)&clientaddr, &clientlen);
        while (1) {
            read(connfd, buf, 1000);
            printf("%s",buf);
        }
    }
    free(buf);
    puts("FATALITY!!!");
}

Есть тестовая страница:

<html>
  <head>
    <title></title>
    <meta content="">
    <style></style>
  </head>
  <body><form method="POST" action="http://localhost:40000/some_test_page.html"><input type="text" name="some_sended_text"><input type="submit" name="Go"></form></body>
</html>

Браузер : Arora 0.10.2. Отправляем с неё данные на приложение. Получаем вот что:


POST /some_test_page.html HTTP/1.1
Origin: file://
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ru-RU) AppleWebKit/533.3 (KHTML, like Gecko) Arora/0.10.2 Safari/533.3
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru, ru-md; 0.9, ru-ua; 0.8
Content-Length: 222
Connection: Keep-Alive
Accept-Encoding: gzip
Host: localhost:40000

В каком месте у меня кривые руки? Функцию systemRun можно рассценивать как main().

P.S. От konqueror'a я получил всё полностью.

Ответ на: комментарий от DarkAmateur

Body POST-запроса не должно обязательно заканчиваться символом '\n'. Поток stdout по умолчанию буферизован построчно, т.е. выводит данные до последнего символа '\n'. fflush() принудительно сбрасывает содержимое буфера на вывод. В setvbuf(3) написано подробнее.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.