Залогиниться на сайт
От: pominub  
Дата: 21.01.05 06:01
Оценка:
Здравствуйте. Такая ситуация:
Мне нужно при надатии на кнопку в диалоге
прочитать информацию с какого-нибудь сайта(HTML код).
Я читаю HTML код построчно и добавляю его в ListBox.
Делаю так:
void CMyDlg::OnButton1() 
{   
    
                   CInternetSession* pInternetSession;
    pInternetSession=new CInternetSession;
    if(!pInternetSession)
    {
        AfxMessageBox("не удалось подключится", MB_OK);
        return;
    }
    
    CStdioFile* pFile=NULL;
    pFile=pInternetSession->OpenURL(CString("http://www.yandex.ru"));// например yandex
    CString stLine;
    while (pFile->ReadString(stLine))
    {
      m_List.AddString(stLine);
    }
    
                   UpdateData(false);
    pFile->Close();
    pInternetSession->Close();
    
}


Но перед тем, как добраться до этой страницы сайта,
необходимо залогиниться на сайте (ввести логин и пароль).
Как можно это сделать программно?
Понимаю, что вопрос не совсем
по теме. Может подскажете тогда, в каком разделе форума
надо его задать....
Заранее благодарен...
Re: Залогиниться на сайт
От: Gridmer Россия www.i-tt.ru
Дата: 21.01.05 15:00
Оценка:
CInternetSession session;
CHttpConnection* pConnection=session.GetHttpConnection(pstrServer,dwFlags,nPort,pstrUserName,pstrPassword); 
CHttpFile* pFile1=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject);
pFile1->SendRequest(NULL,0,(LPVOID)(LPCTSTR)strParams, strParams.GetLength());
pFile1->Read(...);
...

... << Rsdn@Home 1.1.4 beta 1 >>
Re: Залогиниться на сайт
От: algol Россия about:blank
Дата: 21.01.05 15:31
Оценка:
Здравствуйте, pominub, Вы писали:

P>Здравствуйте. Такая ситуация:

P>Мне нужно при надатии на кнопку в диалоге
P> прочитать информацию с какого-нибудь сайта(HTML код).
P>Я читаю HTML код построчно и добавляю его в ListBox.
P>Но перед тем, как добраться до этой страницы сайта,
P>необходимо залогиниться на сайте (ввести логин и пароль).
P>Как можно это сделать программно?

Это зависит от конкретного сайта. Открой содержимое страницы регистрации и посмотри, какие параметры перадаются. Почти наверняка пароль будет кодироваться скриптом, соответственно нужно реализовать тот же алгоритм в своем коде.
Re[2]: Залогиниться на сайт
От: pominub  
Дата: 21.01.05 20:37
Оценка:
Здравствуйте, Gridmer, Вы писали:

G>
G>CInternetSession session;
G>CHttpConnection* pConnection=session.GetHttpConnection(pstrServer,dwFlags,nPort,pstrUserName,pstrPassword); 
G>CHttpFile* pFile1=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject);
G>pFile1->SendRequest(NULL,0,(LPVOID)(LPCTSTR)strParams, strParams.GetLength());
G>pFile1->Read(...);
G>...
G>

G> ;)
Спасибо.
Только у меня несколько вопросов:
1. Я имею дело с методом POST. Тогда мне вместо CHttpConnection::HTTP_VERB_GET
следует поставить CHttpConnection::HTTP_VERB_POST?
2. Что значат параметры:
strObject
(LPVOID)(LPCTSTR)strParams
strParams.GetLength()???
Спасибо
Re[3]: Залогиниться на сайт
От: Gridmer Россия www.i-tt.ru
Дата: 21.01.05 21:36
Оценка:
Здравствуйте, pominub, Вы писали:

P>Спасибо.

P>Только у меня несколько вопросов:
P>1. Я имею дело с методом POST. Тогда мне вместо CHttpConnection::HTTP_VERB_GET
P>следует поставить CHttpConnection::HTTP_VERB_POST?
P>2. Что значат параметры:
P> strObject
P>(LPVOID)(LPCTSTR)strParams
P> strParams.GetLength()???
P>Спасибо

Не хотелось бы MSDN цитировать, да лучше я и объяснить не смогу. Лучше посмотрите на код:

const int MAXBUF=524288;

...

CString LoadFile(const CString& URL, const CString& Login, const CString& Password)
{
    char data[MAXBUF];
    UINT nBytesRead = 0;
    CInternetSession session;
    CHttpConnection* pConnection;
    
    CHttpFile* pFile1=NULL;
    INTERNET_PORT nPort;
    DWORD serviceType;
    CString strServer,strObject;
    AfxParseURL(URL,serviceType,strServer,strObject,nPort);
    CString strParams="";
    //strParams заполняется для POST запроса
    try {
        pConnection=session.GetHttpConnection(strServer,nPort,Login,Password);
        pFile1=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject);
        //или pFile1=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject);
        
        BOOL result = pFile1->SendRequest(NULL,0,(LPVOID)(LPCTSTR)strParams, strParams.GetLength());
        
        nBytesRead+=pFile1->Read(data+nBytesRead, 1024);
        int old=1;
        while(old != 0) {
            old=pFile1->Read(data+nBytesRead, 1024);
            nBytesRead+=old;
        }
        data[nBytesRead] = '\0';
    }
    catch(CInternetException* e) {
        e->Delete();
        //....
    }
    pFile1->Close();
    if(pFile1) delete pFile1;
    pConnection->Close();
    if(pConnection) delete pConnection;
    session.Close();

    return data;
}


Так как пишу по памяти, возможны баги. Поэкспериментируйте и Вам сразу все станет понятно.
... << Rsdn@Home 1.1.4 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.