Newsgroup: it.comp.lang.delphi
Titolo: HTTP e post

ciao a tutti, qualcuno mi saprebbe dire come bisogna scrivere i parametri di
un POST HTTP??? ho provato l'esempio di indy perņ non riesco a passare i
parametri del post

 riesco a passare i parametri del post
1^ Una letta all'rfc del protocollo HTTP.
2^ Una ricerchina con google?
I dati nel post devono essere coppie chiave valore separate da =, ogni
coppia separata da &amp;
I valori devono essere passati per una funzione del tipo:
function Encode(QueryString: string): string;
var
  NMUrl: TNMURL;
begin
  Result := '';
  NMUrl := TNMURL.Create(nil);
  try
    NMUrl.InputString := QueryString;
    Result := NMUrl.Encode;
  finally
    NMUrl.Free;
  end;
end;
// Ne esistono di implementazioni migliori ma al momento ho questa
// sotto mano.
-- 
I'am what I'am, I do what I can

ho provato e riprovato ma non va!!! uso delphi6 enterprise e ho i seguenti
dati:
http://miolink.asp
e come parametri:
FileInfo=nomefile.xxx
perņ non mi passa assolutamente nulla, esegue la chiamata passando parametro
nullo, ho provato a mettere pure gli apici al nome file ma non cambia nulla

 // sotto mano
in un'altro NG mi hanno risposto cosí :(dopo aver postato il codice)
Nella unit IdGlobal UrlEncode c'è gia...
Se qualcuno di voi ha un piccolo programmino funzionante, che usa il post di
idHttp, mi farebbe piacere riceverlo .
raider...@msn.com
ciao e grazie
erik

alla fine ho dovuto modificare lo script usando il GET

 post di idHttp, mi farebbe piacere riceverlo .
Io ho anche fatto l'upload di file :)
Questo codice e' stato utilizzato in produzione. Saluti.
----------------- cut ------------------
procedure TfrmUpload.btnUploadClick(Sender: TObject);
var
  ResponseStream: TMemoryStream;
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
begin
  if edFileName.Text = '' then
  begin
    MessageDlg('Attenzione, prima di fare l''upload si deve selezionare
un file!', mtWarning, [mbOK], 0);
    Self.ModalResult := mrNone;
  end
  else
  begin
    MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
    ResponseStream := TMemoryStream.Create;
    try
      Http.Host := UPLOAD_URL;
      Http.Request.ContentType :=
MultiPartFormDataStream.RequestContentType;
      case fUploadType of
        utArticle: MultiPartFormDataStream.AddFormField('UploadType',
'Articles');
        utPrintReview:
MultiPartFormDataStream.AddFormField('UploadType', 'PrintReviews');
        utSection: MultiPartFormDataStream.AddFormField('UploadType',
'Sections');
      end;
      MultiPartFormDataStream.AddFormField('IDKey', IntToStr(fIDKey));
      MultiPartFormDataStream.AddFile(UPLOAD_FIELD, edFileName.Text,
'text/html');
    { You must make sure you call this method *before* sending the
stream }
      MultiPartFormDataStream.PrepareStreamForDispatch;
      MultiPartFormDataStream.Position := 0;
      HTTP.Post('http://' + UPLOAD_URL + '/' + UPLOAD_SCRIPT,
MultiPartFormDataStream, ResponseStream);
    finally
      MultiPartFormDataStream.Free;
      ResponseStream.Free;
    end;
  end;
end;
----------------- cut ------------------------
unit MsMultiPartFormData;
interface
uses
  SysUtils, Classes;
const
  CONTENT_TYPE = 'multipart/form-data; boundary=';
  CRLF = #13#10;
  CONTENT_DISPOSITION = 'Content-Disposition: form-data; name="%s"';
  FILE_NAME_PLACE_HOLDER = '; filename="%s"';
  CONTENT_TYPE_PLACE_HOLDER = 'Content-Type: %s' + crlf + crlf;
  CONTENT_LENGTH = 'Content-Length: %d' + crlf;
type
  TMsMultiPartFormDataStream = class(TMemoryStream)
  private
    FBoundary: string;
    FRequestContentType: string;
    function GenerateUniqueBoundary: string;
  public
    procedure AddFormField(const FieldName, FieldValue: string);
    procedure AddFile(const FieldName, FileName, ContentType: string;
FileData: TStream); overload;
    procedure AddFile(const FieldName, FileName, ContentType: string);
overload;
    procedure PrepareStreamForDispatch;
    constructor Create;
    property Boundary: string read FBoundary;
    property RequestContentType: string read FRequestContentType;
  end;
implementation
{ TMsMultiPartFormDataStream }
constructor TMsMultiPartFormDataStream.Create;
begin
  inherited;
  FBoundary := GenerateUniqueBoundary;
  FRequestContentType := CONTENT_TYPE + FBoundary;
end;
procedure TMsMultiPartFormDataStream.AddFile(const FieldName, FileName,
  ContentType: string; FileData: TStream);
var
  sFormFieldInfo: string;
  Buffer: PChar;
  iSize: Int64;
begin
  iSize := FileData.Size;
  sFormFieldInfo := Format(CRLF + '--' + Boundary + CRLF +
CONTENT_DISPOSITION +
    FILE_NAME_PLACE_HOLDER + CRLF + CONTENT_LENGTH +
      CONTENT_TYPE_PLACE_HOLDER, [FieldName, FileName, iSize,
ContentType]);
  Write(Pointer(sFormFieldInfo)^, Length(sFormFieldInfo));
  FileData.Position := 0;
  GetMem(Buffer, iSize);
  try
    FileData.Read(Buffer^, iSize);
    Write(Buffer^, iSize);
  finally
    FreeMem(Buffer, iSize);
  end;
end;
procedure TMsMultiPartFormDataStream.AddFile(const FieldName, FileName,
  ContentType: string);
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead or
fmShareDenyWrite);
  try
    AddFile(FieldName, FileName, ContentType, FileStream);
  finally
    FileStream.Free;
  end;
end;
procedure TMsMultiPartFormDataStream.AddFormField(const FieldName,
  FieldValue: string);
var
  sFormFieldInfo: string;
begin
  sFormFieldInfo := Format(CRLF + '--' + Boundary + CRLF +
CONTENT_DISPOSITION + CRLF + CRLF +
    FieldValue, [FieldName]);
  Write(Pointer(sFormFieldInfo)^, Length(sFormFieldInfo));
end;
function TMsMultiPartFormDataStream.GenerateUniqueBoundary: string;
begin
  Result := '---------------------------' +
FormatDateTime('mmddyyhhnnsszzz', Now);
end;
procedure TMsMultiPartFormDataStream.PrepareStreamForDispatch;
var
  sFormFieldInfo: string;
begin
  sFormFieldInfo := CRLF + '--' + Boundary + '--' + CRLF;
  Write(Pointer(sFormFieldInfo)^, Length(sFormFieldInfo));
  Position := 0;
end;
end.


grazie per il codice, potrebbe essere che non ho il service pack 1 di
delphi6?

 delphi6?
Installati l'ultima versione di Indy, poi se ne riparla. Oltretutto D6
e' arrivato ad SP2.
Saluti.


se aggiorno con entrambi sp1 e 2 avrņ problemi nel ricompilare le mie
applicazioni?
"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:ntzhb.26764$e6.9...@twister2.libero.it...


 applicazioni?
Non server aggiornate anche SP1, SP2 comprende anche gli aggiornamenti
precedenti.
Se vuoi utilizzare le dbExpress senza tutti i bug (es con MySQL) devi
fare piccole modifiche (leggi il readme dell'SP2).
Per il resto non dovrebbero esserci problemi.


 wrote in message
news:bm63c4$iss40$1...@ID-203820.news.uni-berlin.de...

Il componente TidHttp di Indy ha tra le varie cose il metodo Post con varie
sintassi.
Tra le varie c'e' ne' una che accetta come parametri l'url della pagina e
una variabile di tipo
TStringList in cui per ogni elemento ci metti una stringa tipo
'NomeCampo=ValoreCampo'.
Si arrangia poi il componente a farsi tutte le conversioni del caso.