Запрос http / 1.0 заблокирован при чтении () (программа c)

Я создаю простую программу, которая подключается к серверу Google и отправляет запрос GET с HTTP / 1.0. Это строка, которую я отправляю:

char get[] = "GET /?gfe_rd=cr&dcr=0&ei=0PfNWpaWJ8vA8gfnuK-wDw HTTP/1.0\r\n";
write(s,get,strlen(get));

И затем я повторяю чтение, пока есть больше байтов для чтения.

    char buffer[10000];
    int pos=0;
    while((t = read(s,buffer+pos,1))!=0){
            pos++;
    }
    printf("END");

Printf никогда не достигается. Вместо этого, если я отправлю эту строку, программа будет работать правильно (это простой запрос, в то время как предыдущий был полным запросом)

char get[] = "GET /?gfe_rd=cr&dcr=0&ei=0PfNWpaWJ8vA8gfnuK-wDw\r\n";
write(s,get,strlen(get));

Почему программа блокируется при чтении? Я имею в виду, что если это была проблема запроса, он должен вернуть ошибку 400. заранее спасибо

0
0
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Полный запрос заканчивается двойным CRLF. Вы отправляете только один, поэтому сервер ожидает оставшейся части запроса.

Ответ принят как подходящий

Задача решена. Полный запрос составлен, как указано в RFC1945:

Full-Request = Request-Line
*( General-Header
| Request-Header
| Entity-Header )
CRLF [ Entity-Body ]

И строка запроса

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Следовательно, в моем случае GET должен заканчиваться двойным CLRF. Спасибо @CodeCaster

Другие вопросы по теме