Ir para conteúdo
Fórum Script Brasil
  • 0

Method Post (socket)


ZueRa

Pergunta

Galera, estou com uma dúvida em relação ao método POST do (ClientSocket).

Por exemplo (EXEMPLO)

Em relação ao site abaixo:

http://www.zone-h.org/component/option,com_notify/Itemid,89/

(observem os Edits lá em baixo)

como poderei fazer para por exemplo, usar o método POST para enviar o que o usuário digitar no programa ? (como se estivesse nessa url, e escrevendo tudo nos edits de lá)

Sei que será +/- assim:

  ClientSocket.Socket.SendText('POST ' + algumacoisa +  ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));

mas.. como integra-lo com o site ? o.O

estou perdido...

Alguém tem uma idéia ?

Grato.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Fiz um teste aqui, mas não deu certo...

fiz 2 forms, e 2 ComboBox (como na página citada acima)

peguei o código HTML dessa página, coloquei em um Memo (chamado de MemoCode)

e coloquei em cada Edit desse código HTML um "#" em ordem crescente...

dessa forma:

no primeiro

edit: #

segundo edit: ##

no primeiro combobox: ###

no segundo combobox: ####

pronto, feito isso, ao usuário clicar no botão ok, pedi para substituir o que foi digitado nos edits do programa no lugar dos "#".

e utilizei o método POST

bem... o código é esse.. (mas não deu certo)

procedure TFzoneh.Button1Click(Sender: TObject);
begin
  Cs.Host := 'www.zone-h.org';
  Cs.Port := 80;
  Cs.ClientType := CtNonBlocking;
  Cs.Active := true;
end;

procedure TFzoneh.CsConnect(Sender: TObject; Socket: TCustomWinSocket);
var
datap:string;
dataa:string;
datab:string;
datac:string;
st:string;
begin
  datap := stringReplace(Memocode.Text,'#',Eddefacer.Text,[rfReplaceAll]);
    dataa := stringReplace(Memocode.Text,'##',Eddomain.Text,[rfReplaceAll]);
      datab := stringReplace(Memocode.Text,'###',Cb.Text,[rfReplaceAll]);
        datac := stringReplace(Memocode.Text,'####',Cbu.Text,[rfReplaceAll]);
  with Cs.Socket do
    begin
      st := '/component/option,com_notify/Itemid,89/';
      Cs.Socket.SendText('POST ' + st + datap + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));
      Cs.Socket.SendText('POST ' + st + dataa + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));
      Cs.Socket.SendText('POST ' + st + datab + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));
      Cs.Socket.SendText('POST ' + st + datac + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));
    end;
end;

procedure TFzoneh.CsRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  Mresult.Lines.Add(Socket.ReceiveText);
end;

end.

Obs.: o "Cs" é o ClientSocket.

e o "Cb" é o ComboBox.

bem... se alguém puder ajudar.. agradeço :D

Link para o comentário
Compartilhar em outros sites

  • 0

fale zuera blzz

então, nunca usei este método, mas uma coisa eu te garanto, a forma que você está usando está errada, vou explicar o porque...

As informações que você está enviando pro servidor, estão indo quebradas, a cada socket.sendtext que você está executando, o servidor do zone-h está recebendo este texto e o interpretando, e não recebendo um por um segurando e interpretando depois, até porque mesmo que fosse assim, como ele iria saber que você terminou de enviar....

Outra coisa, Connection: Close; a conexão é fechada a cada socket.sendtext...

Acho que você vai ter que procurar na net algo sobre, pois acredito que são usados mais alguns cabeçalhos http para poder usar o método.

eu nunca mexi com o método post, então não sei como te ajudar...

se eu achar algo sobre eu posto aqui...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Churc, veja o que um amigo meu disse:

• SmartBoy_ & copyleft {zzZZZzz} says:

tem uma ferramenta do indy

• SmartBoy_ & copyleft {zzZZZzz} says:

que bota diretu os dados do post

depos é so dar

idhttp1.post(url, dados_do_post);

sabe algum modo de fazer isso com INDY ?

porque nunca trabalhei com ele....

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá ZueRa,

seria isso:

var
 Ts : TStringList;
begin
 Ts := TStringList.Create;
 try
 Ts.Add('blablabla');
 Ts.Add('blablabla');
 Ts.Add('blablabla');
 IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
 IdHTTP.Post('http://www.site.com/script.php',Ts);
 finally
 Ts.free;
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Progr'amador

mas me diga... como o server vai saber, que estou me referindo EXATAMENTE a aqueles forms ?

sendo que não tem nada que "refira de alguma forma" a eles ?

Meu code ficou assim:

procedure TFzoneh.Button1Click(Sender: TObject);
var
Ts : TStringList;
begin
Ts := TStringList.Create;
try
    Ts.Add('blablabla');
    Ts.Add('blablabla');
    Ts.Add('blablabla');
    Ts.Add('blablabla');
    IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
    IdHTTP.Post('www.zone-h.org/component/option,com_notify/Itemid,89/',Ts);
finally
Ts.free;
end;
end;
end.

Grato.

Acabei de testar...

não deu certo =/

acho que tem que fazer alguma referência aos forms...

Link para o comentário
Compartilhar em outros sites

  • 0

Olá...

Veja só... eu há muito tempo (desde o Delphi3) uso cgi e isapi, tanto nas aplicações totalmente web como nas mistas (forms com gravação e recuperação de dados com TTable e TQuery e cgi's e isapi's).

Durante este tempo, nunca consegui usar o método Post nas ISAPIs (dll's) e CGIs (exe's), quando eu escrevia diretamente a chamada diretamente na URL (um simples link em página htm mesmo)... ou seja, só coseguia usar o método POST diretamente nos botões "submit" dos forms...

Assim, toda vez que preciso fazer, por exemplo, uma pesquisa num banco de dados, através dos meus programas rodando sob o IIS ou Personal Web (XP e 98 respectivamente), uso GET.

De qualquer forma, vou pesquisar mais...

Ok?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...