Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2014, 15:18   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию С, Linux, libcurl, coockie, login

Всем привет!
Хочу автоматизировать сбор и обработку информации с одного сайта.
Нужно логиниться на сайт, переходить в определенный раздел и брать сообщения и их обрабатывать. (обработку текста сообщений я написал, разбирает сообщения как надо). Проблема в получении этих сообщений.
Для начала хочу понять такую вещь как куки, как и зачем их использовать.
На сколько я понимаю, после того как я полям логин-пасс передам логин и пасс, сайт мне должен прислать куки, которые я должен сохранить куда-то и потом, при следующем обращении к сайту должен их передать, чтобы он знал, что я залогиненый.
Так ?
Кто может подсказать/кинуть статьи/намекнуть как это все сделать с помощью libcurl, C, linux ?
!Не прошу за меня сделать! Такого не надо. Мне нужно разобраться в этом. По сему за любое объяснение/статью - спасибо!
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 23.09.2014, 16:02   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

cookie передаются туда и обратно в HTTP заявках/ответах

Ref:
http://en.wikipedia.org/wiki/HTTP_cookie
waleri вне форума Ответить с цитированием
Старый 23.09.2014, 17:52   #3
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Попробовал отправить запрос:
Код:
#include <stdio.h>
#include <curl/curl.h>
 
int main(void)
{
curl_global_init( CURL_GLOBAL_ALL );

  CURL *curl;
  CURLcode res;
 
  curl = curl_easy_init();

  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");

	curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);

	curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
 
//здесь !!!!!!!!!!
    res = curl_easy_perform(curl);

 
    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }

  return 0;
}
вот эта строчка
Код:
res = curl_easy_perform(curl);
выводит весь HTML код страницы в консоль. как сделать, чтобы не выводила..
пробовал искать какие-то параметры по этому поводу - пока не нашел..
может кто знает ?
Спеши медленно.

Последний раз редактировалось asmars; 23.09.2014 в 18:18.
asmars вне форума Ответить с цитированием
Старый 23.09.2014, 19:57   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

http://curl.haxx.se/libcurl/c/CURLOP...EFUNCTION.html
waleri вне форума Ответить с цитированием
Старый 24.09.2014, 21:24   #5
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Спасибо waleri, разобрался как писать, к примеру, получаемую страницу в файл.

Сейчас пытаюсь залогиниться на сайте, но почему-то не выходит..
Передаю логин и пароль.
Как посмотреть заголовки ответа ? И как сохранить куки в файл, чтобы посмотреть, что в них передается?

Код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>

size_t  write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    static int first_time=1;
    char outfilename[FILENAME_MAX] = "body.html";
    static FILE *outfile;
    size_t written;
	
    if (first_time) {
        first_time = 0;
		
        outfile = fopen(outfilename,"w");
        if (outfile == NULL) {
            return -1;
        }
        fprintf(stderr,"The body is <%s>\n",outfilename);
    }
	
    written = fwrite(ptr,size,nmemb,outfile);
    return written;
}

int main(int argc, char **argv)
{
    CURL *curl_handle;
    char headerfilename[FILENAME_MAX] = "head.html";
    FILE *headerfile;
    int rc=0;
	
    curl_handle = curl_easy_init();
	
    curl_easy_setopt(curl_handle,   CURLOPT_NOPROGRESS  ,0);
    curl_easy_setopt(curl_handle,   CURLOPT_MUTE        ,0);
    curl_easy_setopt(curl_handle,   CURLOPT_WRITEFUNCTION,&write_data);
	curl_easy_setopt(curl_handle,   CURLOPT_VERBOSE, 1L);
	
	curl_easy_setopt(curl_handle,   CURLOPT_USERAGENT, "Mozilla/4.0");
	curl_easy_setopt(curl_handle,   CURLOPT_AUTOREFERER, 1 );
	curl_easy_setopt(curl_handle,   CURLOPT_FOLLOWLOCATION, 1 );
	curl_easy_setopt(curl_handle,   CURLOPT_COOKIEFILE, "");
	curl_easy_setopt(curl_handle,   CURLOPT_COOKIEJAR, "cookie.txt"); //тут пусто, ничего сюда не сохраняет
	
	// Visit the login page once to obtain a PHPSESSID cookie
	curl_easy_setopt(curl_handle,   CURLOPT_URL, "http://");
	//curl_easy_perform( curl_handle );


	// Now, can actually login. First we forge the HTTP referer field, or HTS will deny the login
	curl_easy_setopt(curl_handle,   CURLOPT_REFERER, "http://");
	
	// Next we tell LibCurl what HTTP POST data to submit
	char *data="user_name=&password=";
	curl_easy_setopt(curl_handle,   CURLOPT_POSTFIELDS, data);
	
	curl_easy_perform( curl_handle );
	  
	curl_easy_cleanup(curl_handle);
    return 0;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.09.2014, 21:47   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

http://curl.haxx.se/libcurl/c/CURLOP...RFUNCTION.html
Смотрите какие данные приходят - может там и нет cookie
waleri вне форума Ответить с цитированием
Старый 24.09.2014, 21:55   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Вы правы..
Вот что приходит:

Код:
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 24 Sep 2014 17:53:24 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.09.2014, 23:34   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Поставьте сниффер, типа WireShark и смотрите что посылает/получает браузер и что посыслаете/получаете вы, на уровне сетевых пакетов.
waleri вне форума Ответить с цитированием
Старый 25.09.2014, 00:21   #9
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

эм.. есть нюанс. Я компилю это на сервере, где стоит линукс и иксов нет.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 25.09.2014, 00:25   #10
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Я прочел такую штуку, что если аутентификации на ява-скрипте - тогда через libcurl не возможно это сделать.. как-то так.
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LibCurl в QtCreator Linux ubuntu Notan1310 C/C++ Сетевое программирование 5 02.08.2013 22:31
Передача данных с coockie в поле формы (input type="text") Olegzxc PHP 1 10.07.2011 14:36
LIbCurl linux lazarus ВИННИ ПУX Lazarus, Free Pascal, CodeTyphon 0 10.05.2011 10:50
libcurl.NET badgo Общие вопросы .NET 2 31.07.2010 17:33
login@domain.com;pass она должна брать сначала только "login" потом "domain.com" и на последок "pass" AquaKlaster Общие вопросы Delphi 4 05.04.2009 17:31