Re: Бот для Варваров или IdHTTP не переходим по нужной ссылке
Во первых, не стоит забывать, что инди 10 на стадии бета тестирования, ошибки действительно есть, и не мало. Но они довольно оперативно фиксятся. Если конечно о них сообщить, но для многих проблема зарегится на портале разработчиков
Плюс к этому надо обновлять компоненты. Например инди компоненты, которые устанавливаются вместе с ХЕ2 Update 4 HotFix 1 разработчик назвал устаревшими и практически неработоспособными.
Во вторых, если инди глючит, то код компонент открыт, можете сами поправить все что надо. Это не так уж сложно, как может показаться сначала.
В третьих, как уже писали выше, в большинстве случаев проблема работоспособности программы кроется не в компонентах, а в способе их использования. С этим не поспоришь, практика прекрасно это подтверждает.
Хотя код в первом посте темы выглядит работоспособным. Может компоненты не обновлены.
________________
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
Re: Бот для Варваров или IdHTTP не переходим по нужной ссылке
Компоненты не обновленные точно. Но я надеялся, что проблема не в этом... Ладно, буду пытаться что-то переделать.
Всем спасибо, будут советы - пишите
Найду ответ - отпишусь
Re: Бот для Варваров или IdHTTP не переходим по нужной ссылке
Цитата:
Сообщение от DDrim
Незнание синапса
Пытался, просто там даже авторизация нормально не проходит.
Я особо париться не стал, и забил на синапс...
Хех а чего там не знать то?
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
вот, почитай... тут все предельно легко.
А не авторизовываться может и за того что синапс нужно ручками настраивать... из личного опыта...
Допустим инди сам заголовок подставит а синапсу нужно носом тыкнуть... примерно так
http.headers.add('Заголовок')
Re: Бот для Варваров или IdHTTP не переходим по нужной ссылке
Да знаю, что надо самому настраивать, вроде правильно настраивал... Вот примерно так писал:
Код:
type
TDHttp=class
FCodePage: Cardinal;
FSend: THttpSend;
constructor Create;
function GetError: string;
function GetRedirectUrl: string;
function GET(AUrl: string): string;
function POST(AUrl: string; AParams: TStringList): string;
end;
...
procedure GET_Link(aLink: AnsiString);
var
http: TDHttp;
begin
if(aLink = '') then Exit;
http := TDHttp.Create;
Try
Code := Utf8ToAnsi(http.Get(aLink));
CurrentURL := aLink;
Except
showmessage('error: ' + http.GetError);
end;
http.Free;
end;
constructor TDHttp.Create;
begin
FSend:=THttpSend.create;
FSend.Protocol:='1.1';
// FSend.Protocol:='1.0';
FSend.Timeout:=3000;
FCodePage:=CP_UTF8;
FSend.UserAgent:='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Alexa Toolbar; MEGAUPLOAD 1.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)';
FSend.KeepAlive := True;
FSend.TargetPort := '80';
FSend.TargetHost := 'barbars.ru';
FSend.MimeType :='application/x-www-form-urlencoded';
end;
function TDHttp.GetError: string;
begin
Result:='';
if FSend.ResultCode>0 then
Result:=Result+IntToStr(FSend.ResultCode);
if FSend.ResultString<>'' then
Result:=Result+': '+FSend.ResultString;
end;
function TDHttp.GetRedirectUrl: string;
var i: integer;
Line: string;
begin
Result:='';
for i := 0 to FSend.Headers.Count-1 do
begin
Line:=LowerCase(FSend.Headers[i]);
if Pos('location:',Line)>0 then
begin
Result:=Trim(StringReplace(Line,'Location:','',[rfIgnoreCase]));
Exit;
end;
end;
end;
function TDHttp.GET(AUrl: string): string;
var Stream: TStringStream;
RedirectUrl: string;
begin
try
Stream:=TStringStream.Create('');
try
FSend.Headers.Clear;
FSend.Document.Clear;
// if FReferer<>'' then FSend.Headers.Add('Referer: '+FReferer);
if FSend.HTTPMethod('GET', AUrl) then
begin
FSend.Document.SaveToStream(Stream);
Result:=Stream.DataString;
RedirectUrl:=GetRedirectUrl;
if RedirectUrl<>'' then
Result:=GET(RedirectUrl);
end else raise Exception.Create(GetError);
finally
Stream.Free;
end;
except
on E: Exception do
raise Exception.Create('TDHttp.GET('+AUrl+'): '+E.Message);
end;
end;
function TDHttp.POST(AUrl: string; AParams: TStringList): string;
var Stream: TStringStream;
RedirectUrl: string;
i: integer;
X: tstringlist;
begin
try
Stream:=TStringStream.Create('');
try
FSend.Headers.Clear;
FSend.Document.Clear;
for i := 0 to AParams.Count-1 do
if i=0 then
Stream.WriteString(AParams[i]) else
Stream.WriteString('&'+AParams[i]);
FSend.Document.LoadFromStream(Stream);
if FSend.HTTPMethod('POST',AUrl) then
begin
FSend.Document.SaveToStream(Stream);
Result:=Stream.DataString;
RedirectUrl:=GetRedirectUrl;
if RedirectUrl<>'' then
Result:=GET(RedirectUrl);
end else raise Exception.Create(GetError);
finally
Stream.Free;
end;
except
on E: Exception do
raise Exception.Create('TDHttp.POST('+AUrl+'): '+E.Message);
end;
end;
...
Т.е. все вроде настраивал правильно, но да ладно, я особо разобраться со синапсом не пытался, честно скажу.