LINUX.ORG.RU

Вытащить куки из ответа


0

0

Добрый день! Написал простенький на С++ веб-клиент. Когда сервер присылает ответ от POST запроса.Надо пропарсить ответ от сервера(вытащить куки). Куки находятся среди <input type='hidden' name='s' value='bb1pekf7f42a1tes3adfu6d762ed389ef4pa8c3237651805035118b1' />. Как лучше всего реализовать? Возможно такое сделать с помощью String class?


<input ... > идёт от клиента к серверу, вообще-то, а не от сервера. И данные оттуда идут http-хедером. Set-Cookie от сервера идёт также хедером.

Reaper ★★
()

Так вам значение этого скрытого поля надо или кукисы? Кукисы, как уже сказали, передаются набором в поле Set-Cookie, а чтобы значение скрытого поля получить, нужно парсить/грепать тело ответа.

hunt
()

Если у вас нормальные куки, то

	char *cookie = getenv("HTTP_COOKIE");
	if(!cookie) return NULL;

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Deliza

Так и получайте его, как обычно:

par = strtok(qs,"&,; |\n");
do {
   if(strcmp(par, "s") == 0){
      ...
   }
   ...
}while((par = strtok(NULL,"&,; |\n"))!=NULL);

Eddy_Em ☆☆☆☆☆
()

Вконтактик спамить собрался? А вообще, то что ты привел, это не куки, а форма которую надо засубмитить вконтактику, и после чего он уже ставит куку, если я правильно помню.
Можно найти начальную позицию str.find(«'<input type='hidden' name='s' value='») + 56 байт - конечная позиция.
Или использовать какую нибудь обертку к pcre или написать конечный автомат.

PoMbl4
()
Ответ на: комментарий от Deliza

С разбором xml и потомков приходится выбирать между быстродействием и «качеством».

Вот 3 способа. Расположены по уменьшению «качества» и увеличению быстродействия:

  • Использовать html-парсер
  • Регексы
  • Поиск подстроки
hunt
()
Ответ на: комментарий от PoMbl4

Нет. Спамить не собираюсь.У меня ответ от сервера сохраняется в файл otvet.txt. в нём куча всего. вот я и хочу вытащить из него «bb1pekf7f42a1tes3adfu6d762ed389ef4pa8c3237651805035118b1». как это сделать додуматься сам не могу.

Deliza
() автор топика
Ответ на: комментарий от Deliza

> как это сделать додуматься сам не могу

С++ с «веб-клиентом» фтопку. man Perl::Mechanize. Гораздо быстрее необходимое сделаете. :)

Reaper ★★
()
Ответ на: комментарий от Deliza

Perl действительно очень помог бы =)

C:\>perl -nle "print $& if m|(?<=name='s' value=')\w+|" otvet.txt

На C++ можно перебирать по строкам и токинам, как Eddy_Em предложил.

hunt
()
Ответ на: комментарий от hunt

Если Вам именно такую подстроку нужно найти, перебирайте по строкам файл и ищите подстроку «<input type='hidden' name='s' value='». Если нашлась - взять 32 (32?) символа после неё.

hunt
()
Ответ на: комментарий от Deliza

А он весьма неплох и удобен именно в обработке текста, там не так сложно всё, изучите, чем Франкенштейна лепить. -)

Reaper ★★
()
Ответ на: комментарий от Deliza

Элементарно:

cat /tmp/otvet.txt | grep input | grep hidden | sed -e «s/.*='//g» | sed -e «s/'.*//g»

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