Страницы: 1
RSS
Запрос html кода страницы, требующей авторизации
 
Всем привет.  
Хочу использовать знакомый вам код (см. файл) для получения хтмл-кода страницы для дальшейней его обработки и "вытаскивания" из него нужной информации (на подобии курсов валют).  
Вопрос в чем... для доступа к странице (по прямой ссылке) сначала необходимо ввести логин/пароль. Есть ли возможность или в ссылку, или еще куда поместить эти логин/пароль, чтобы оно само авторизовалось и правильную страницу доставало?  
Я не силен в html и программировании страниц, но там вроде без всяких java и т.д.  
 
Саму страницу и логин/пароль, как вы понимаете, я сказать не могу :))  
 
Достаточно ли информации для ответа или может еще что-то требуется?
 
Совсем забыл про формат... вот 2003
 
> Саму страницу и логин/пароль, как вы понимаете, я сказать не могу :))  
 
А вот и зря не говорите.  
Уже получили бы готовое решение...  
 
Просто на сайтах авторизация может быть выполнена по-разному...  
 
В некоторых случаях данные отправляются методом POST, в некоторых данные запрашивает javascript, и т.д. и т.п.  
 
К тому же надо знать, какой протокол (http или https) используется - при https может выскочить диалоговое окно насчёт сертификата.  
 
Я уже приводил примеры кода авторизации на сайтах.  
Обычно я программно заполняю поля ЛОГИН и ПАРОЛЬ, и программно нажимаю кнопку ОТПРАВИТЬ:  
 
 
NavStr = "https://адрес сайта"  
   IE.Navigate NavStr  
   While IE.busy Or (IE.readyState <> 4): DoEvents: Wend  
 
   Set ieDoc = IE.Document  
   If ieDoc.Title Like "Ошибка сертификата*" Or ieDoc.Title Like "Certificate Error*" Then  
       ieDoc.Links(1).Click  
       While IE.busy Or (IE.readyState <> 4): DoEvents: Wend  
       Set ieDoc = IE.Document  
   End If  
 
   With ieDoc  
       .all("user").Value = "логин"  
       .all("password").Value = "пароль"  
       .all("Submit").Click  
       For i = 1 To 1000: DoEvents: Next  
       While IE.busy Or (IE.readyState <> 4): DoEvents: Wend  
   End With  
 
 
 
 
Есть ещё варианты:  
 
 
 
NavStr = "https://site.ru/htdocs/template.cgi?tpl=base/index.tpl"  
 
Dim PostData() As Byte, Headers As String  
' http://www.motobit.com/util/base64-decoder-encoder.asp  
PostData = "nick=123&password=456"  
PostData = ""    'StrConv(PostData, vbFromUnicode)  
Headers = "Content-Type: application/x-www-form-urlencoded" & vbCrLf  
Headers = "Authorization: Basic " & "bmllkasgkljhgkjhkjhklsdhjgdfg=="  
IE.Navigate NavStr, 0, "", PostData, Headers  
 
While IE.Busy Or (IE.readyState <> 4): DoEvents: Wend  
 
Set ieDoc = IE.Document  
If ieDoc.Title Like "Ошибка сертификата*" Or ieDoc.Title Like "Certificate Error*" Then  
   ieDoc.Links(1).Click  
   While IE.Busy Or (IE.readyState <> 4): DoEvents: Wend  
   Set ieDoc = IE.Document  
End If  
 
 
Можно, конечно, авторизоваться с использованием MSXML2.XMLHTTP (видел примеры кода где-то в инете), но у меня не получилось добиться с ними результатов...
 
Спасибо. Вечером попробую разобраться. Если не получится, то кину ссылку на сайт :)
 
Видимо, разбираться будет сложновато... Если не трудно, помогите, пжл :)  
 
Пример сайта:    
http://www.drive3.ru/admin/builds/buildsedit2.aspx?modelId=159  
 
По умолчанию логин вводится здесь  
http://www.drive3.ru/admin/
 
Ну а где тестовая пара ЛОГИН - ПАРОЛЬ?  
 
Как же я, по-вашему, напишу код скачивания некой страницы, если я её даже посмотреть не могу?
 
Игорь, что случилось с интуицией? :-)
 
{quote}{login=Юрий М}{date=28.04.2010 07:21}{thema=}{post}Игорь, что случилось с интуицией? :-){/post}{/quote}  
 
Так и быть, включу ненадолго интуицию)))  
 
Haken, попробуйте такой вариант: http://excelvba.ru/XL_Files/Sample__28-04-2010__22-30-46.zip  
 
 
Вот весь код:  
 
Dim ieDoc As MSHTML.HTMLDocument  
 
Sub CommandButton1_Click()  
   IE.Navigate "http://www.drive3.ru/admin/"  
   While IE.busy Or (IE.readyState <> 4): DoEvents: Wend  
 
   Set ieDoc = IE.Document  
   With ieDoc  
       .all("login").Value = "логин"  
       .all("password").Value = "пароль"  
       .forms(0).submit  
       While IE.busy Or (IE.readyState <> 4): DoEvents: Wend  
   End With  
   MsgBox ieDoc.body.innerText, vbInformation, "Текст страницы"  
End Sub  
 
 
Поменяйте логин и пароль на свои, и посмотрите, что получится.
 
{quote}{login=EducatedFool}{date=28.04.2010 08:33}{thema=Re: }{post}  
Так и быть, включу ненадолго интуицию)))  
{/post}{/quote}  
Большое спасибо за интуицию :)  
Правда, этот макрос не до конца работает... если пошагово посмотреть, то логин и пароль вводятся в поля, но при .forms(0).submit они "не учитываются". Т.е. результатом является страница "Введите логин и пароль" - как будто поля были пустыми. Если бы всё было хорошо (в плане передачи данных), то была бы страница "Введён неверный пароль."  
Но если щелкать вручную в окне, то входит нормально. Поэтому я решил остановиться на варианте с ручным логином в таком окне (в целях повышения безопасности - чтобы не прописывать данные в коде), ну а потом уже дело техники :))  
 
P.S.: поскольку я никоим образом не отношусь к администрации того сайта, то у меня нет возможности получить тестовый логин :) у меня есть только мой, который секретный ;)  
 
P.P.S.: может на всякий случай в целях повышения моей образованности на будущее посмотрите, почему он не логинится правильно? :)
 
Печкин: "... принёс посылку для вашего мальчика. Но я вам её не отдам"
 
{quote}{login=Юрий М}{date=28.04.2010 10:52}{thema=}{post}Печкин: "... принёс посылку для вашего мальчика. Но я вам её не отдам"{/post}{/quote}  
Это Вы про логин? :) ну не могу же я от работы дать пароль :) (тем более, он даже не совсем мой... помогаю)  
 
Критерием работоспособности макроса можно считать результирующую страницу: если "Введите логин/пароль" - значит что-то не то... если "Введён неверный пароль" - то всё ок :)
Страницы: 1
Наверх