| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Передача структуры через сокеты |
| Автор: Gwynbleiddd 19.2.2012, 22:41 | ||||||
| Добрый день. Возник вопрос, решение найти не получается. Необходимо принять запрос от клиента типа GET, разбить его на составные части (распарсить) (User-Agent, Accept и т.п.), записать все части в структуру, затем при необходимости модифицировать отдельные части этого запроса и, наконец, послать серверу. C приёмом, разбивкой запроса на части и записью в структуру вроде вопросов нет. Не понимаю как теперь собрать заново модифицированный запрос и отправить его серверу. Допустим, вот есть запрос:
Есть структура, в которую мы по частям записали весь запрос.
Содержание структуры следующее
Как теперь послать её серверу? Заранее Спасибо |
| Автор: feodorv 20.2.2012, 00:14 | ||
А в чём, собственно, проблема? Например, можно собрать запрос согласно спецификации HTTP/1.1 в один буфер, и этот буфер отослать серверу. Буфер можно заказать (alloc etc), можно и определить фиксированного размера (поля-то в Вашей структуре фиксированы по размеру, нужно будет только учесть размер текста заголовков c ':' и ' ', \r\n на каждый заголовок и \r\n\r\n на самый конец запроса). Маловато для команды, уже простой POST не влезает... Нужна только главная страница сайта, или что-то ещё внутри него? Добавлено @ 00:23 Вот кусок моего кода на Си, реализующего формирование запроса (через буфер переменной длины):
|
| Автор: Alexeis 20.2.2012, 09:13 | ||
Если не важен строго С, то можно сделать так
|
| Автор: Alca 20.2.2012, 11:21 |
| snprintf |
| Автор: Gwynbleiddd 20.2.2012, 17:54 |
| Спасибо большое за ответы. 1. Вчера долго соображал как передать запрос, который хранится в структуре. Сегодня утром пришла мысль "Зачем передавать структуру, когда можно функциями strcat "склеить" все поля запроса в один буфер и просто передать этот буфер?" Утро вечера мудренее, сегодня именно так попробую 2. Размеры полей структуры писал "на глаз", т.к. сейчас работал с определённым запросом и главное было модифицировать и послать его. Так сказать, пробная версия. 3. Сейчас посмотрю код на формирование запроса, надеюсь поможет ) 4. Нужно именно на Си, С++ не подходит |