Могу ли я попросить небольшую помощь с помощью Indy для входа на сайт, пожалуйста?Войти на сайт с TwebBrowser, но не с TidHTTP
Во-первых, так же, как «доказательство концепции» Я использовал TWebBrowser, чтобы проверить свои учетные данные следующим образом ...
procedure TfrmMain.cxButton1Click(Sender: TObject);
begin
webBrow.Navigate('http://assurance.redtractor.org.uk/rtassurance/services.eb');
end;
procedure TfrmMain.webBrowDocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
CurrentBrowser: IWebBrowser2;
TopBrowser: IWebBrowser2;
Document: OleVariant;
Doc3 : IHTMLDocument3;
Frm : IHtmlFormElement;
begin
CurrentBrowser := pDisp as IWebBrowser2;
TopBrowser := (ASender as TWebbrowser).DefaultInterface;
if Assigned(CurrentBrowser) and Assigned(TopBrowser) then
begin
if CurrentBrowser = TopBrowser then
begin
Doc3 := CurrentBrowser.Document as IHTMLDocument3;
Webbrow.OnDocumentComplete := nil; // remove handler to avoid reentrance
Doc3.getElementById('el9M9AQXIL51JI3_loginPnl_username').setAttribute('value', 'aValidUserName', 0);
Doc3.getElementById('el9M9AQXIL51JI3_loginPnl_password').setAttribute('value', 'aValidPassword', 0);
//Frm := Doc3.getElementById('ct100') as IHtmlFormElement;
Doc3.GetElementByID('el9M9AQXIL51JI3_loginPnl_button').click();
end;
end;
end;
Я получил выше от whosrdaddy ответа здесь Automated Log In (webBrowser)
Это записывает меня на сайт и приводит меня на страницу поиска ... именно то, что мне нужно.
Однако я бы хотел избежать использования TWebBrowser, поскольку, как я думал, мои поисковые запросы будут медленными из-за того, что страница должна будет отображаться. Имея это в виду, я пытался использовать Indy 10, чтобы войти в тот же адрес, передавая параметры, как так ...
idRedTractor.Post(login_URL, Request, Response);
Но все это возвращает это «Ошибка сервера, Unauthenticated UserName» ответ.
Мой полный код пытается войти в ...
procedure TfrmMain.btnLogonClick(Sender: TObject);
var
Response : TMemoryStream;
searchResp : TMemoryStream;
Request : TStringList;
searchReq : TStringList;
resultStr : TStringList;
begin
with IdRedTractor do
begin
allowCookies := true;
cookieManager := cookieRedTractor;
IOhandler := IdSSLRedTractor;
request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
request.contentType := 'text/html';
request.userAgent := 'Mozilla/3.0 (compatible; Indy Library)';
end;
with IdSSLRedTractor do
begin
// SSLOptions does not make a difference. Still get a Server Error message
SSLOptions.Mode := sslmUnassigned;
//SSLOptions.Mode := sslmBoth;
//SSLOptions.Mode := sslmClient;
//SSLOptions.Mode := sslmServer;
end;
try
try
response := TMemoryStream.Create;
searchResp := TMemoryStream.Create;
try
request := TStringList.Create;
searchReq := TStringList.Create;
resultStr := TStringList.Create;
// Individual params via FireBug
Request.Add('__EVENTARGUMENT=login');
Request.Add('__EVENTTARGET=el9M9AQXIL51JI3$loginPnl');
Request.Add('__VIEWSTATE=/wEPDwULLTEzMjc3NzQ0ODEPZBYEAgEPZBYCZg9kFgJmDxYCHgRUZXh0BRNDaGVja2VycyAmIFNlcnZpY2VzZAIDD2QWBAICDxYCHgdWaXNpYmxlaGQCCQ9kFgICAg9kFgICBA8WAh8BZxYCAgEPFgIfAWhkZD3T1Ydwd12+6SzZOgVHrnka9LKB');
Request.Add('__VIEWSTATEGENERATOR=9D5BCA8C');
Request.Add('ebAbPwd=' + edtUserPass.text);
Request.Add('ebAbPwd=');
Request.Add('ebAbUser=' + edtUserName.text);
Request.Add('ebAbUser=');
Request.Add('el9M9AQXIL51JI3$loginPnl_...=' + edtUserName.Text);
Request.Add('el9M9AQXIL51JI3$loginPnl_...=' + edtUserPass.text);
Request.Add('el9OK3XX11WQS60_email=');{}
IdRedTractor.Request.Referer := 'http://assurance.redtractor.org.uk/rtassurance/schemes.eb';//initial_URL;
IdRedTractor.Post('http://assurance.redtractor.org.uk/rtassurance/services.eb', Request, Response);
if idRedtractor.ResponseCode = 200 then
begin
resultStr.Clear;
Response.Position := 0;
resultStr.LoadFromStream(Response);
mmoResponse.Lines.AddStrings(resultStr);
end;
finally
request.Free;
searchReq.Free;
resultStr.Free;
end;
finally
response.Free;
searchResp.Free;
end;
except
on e: Exception do
showMessage(e.Message);
end;
end;
Только в случае существует некоторое значение в версиях, они «libeay32.dll» v1.0.1.3 в SSL библиотеки DLL и 'ssleay32.dll', также v1.0.1.3.
Могу ли я попросить вас о помощи, понимая, что я пропустил или сделал неправильно, что мешает мне войти в этот сайт с помощью TidHTTP?
Спасибо за комментарий whosrdaddy. Я удалил ошибку «Ошибка сервера». Вместо того, чтобы использовать значения для параметров отдельно, я видел в Firebug, что значения в «Источнике» были немного разными, т. Е. «/» Был представлен символами «% 2F». Теперь я получаю то, что похоже на источник страницы. – Johnny
Так что все хорошо сейчас или все еще не работает? – whosrdaddy
Нет. Я просто не получаю то, что я ожидаю от текста/html в своем ответе. Это похоже на то, что меня перенаправляют обратно на исходную страницу, так как я вижу метку имени пользователя и пароля без значений. Вы упомянули cookie в своем предыдущем комментарии, и повторение коллекции файлов cookie просто возвращает sessionID, тогда как я вижу гораздо больше в FireFox при просмотре FireBug. Я просто не понимаю, почему мне нужно столько параметров для входа в систему. Я буду продолжать пытаться. спасибо за ваше время. – Johnny