[fpc-pascal] Using fphttpclient to simulate web action sequence

leledumbo leledumbo_cool at yahoo.co.id
Wed Apr 29 13:33:26 CEST 2015


I need to create some kind of bot for automatic testing against our web app.
The following app target real online web application:

{$mode objfpc}{$H+}

uses
  {$ifdef unix}
  cthreads,
  {$endif}
  Classes,SysUtils,fphttpclient;

procedure Log(http: TFPHTTPClient);
begin
  WriteLn('BEGIN
**********************************************************');
  WriteLn(http.RequestHeaders.Text);
  WriteLn(http.ResponseStatusCode);
  WriteLn(http.ResponseHeaders.Text);  
  WriteLn('END **********************************************************');
end;

var
  http: TFPHTTPClient;
  formdata: TStrings;
begin
  http := TFPHTTPClient.Create(nil);
  try
    // initial GET request to initialize cookies
    http.Get('http://lelelagi.mysirclo.com');
    Log(http);

    // POST: add item to cart
    formdata := TStringList.Create;
    formdata.Values['cmd'] := 'add';
    formdata.Values['item_id'] := 'montauk-tote';
    formdata.Values['member_email'] := 'leledumbo_cool at yahoo.co.id ';
    http.FormPost('http://lelelagi.mysirclo.com/cart',formdata); // #1
    Log(http);

    // POST: set country, city and shipping
    formdata.Clear;
    formdata.Values['cmd'] := 'shipping_country';
    formdata.Values['shipping_value'] := 'ID';
    http.FormPost('http://lelelagi.mysirclo.com/cart',formdata); // #2
    Log(http);

    formdata.Clear;
    formdata.Values['cmd'] := 'shipping_city';
    formdata.Values['shipping_value'] := 'Kota Depok - Depok';
    http.FormPost('http://lelelagi.mysirclo.com/cart',formdata);
    Log(http);

    formdata.Clear;
    formdata.Values['cmd'] := 'shipping';
    formdata.Values['shipping_value'] := 'JNE REG';
    http.FormPost('http://lelelagi.mysirclo.com/cart',formdata);
    Log(http);

    // POST: place order
    formdata.Clear;
    formdata.Values['first_name'] := 'Test Name';
    formdata.Values['phone'] := '088712342345';
    formdata.Values['address_line1'] := 'Certain Street';
    formdata.Values['country'] := 'ID';
    formdata.Values['state'] := 'DKI Jakarta';
    formdata.Values['city'] := 'DKI Jakarta - Jakarta';
    formdata.Values['postal_code'] := '12424';
    formdata.Values['email'] := 'mail at testmail.co.id';
    formdata.Values['delivery_first_name'] := 'Test Name';
    formdata.Values['delivery_phone'] := '088712342345';
    formdata.Values['delivery_address_line1'] := 'Certain Street';
    formdata.Values['delivery_country'] := 'ID';
    formdata.Values['delivery_state'] := 'DKI Jakarta';
    formdata.Values['delivery_city'] := 'DKI Jakarta - Jakarta';
    formdata.Values['delivery_postal_code'] := '12424';
    formdata.Values['delivery_email'] := 'mail at testmail.co.id';
    formdata.Values['shipping_value'] := 'JNE REG';
    formdata.Values['payment_method'] := 'bank-transfer';
    formdata.Values['message'] := '';
    formdata.Values['agreement'] := 'on';
   
http.FormPost('http://lelelagi.mysirclo.com/cart/place_order/guest',formdata);
    Log(http);
  finally
    http.Free;
  end;
end.

The app always dies with "EHTTPClient: Error reading data from socket" after
the first FormPost, any of them (e.g. if you comment #1, it will die after
#2). Did I miss something? Is this the correct way to make such a
simulation?



--
View this message in context: http://free-pascal-general.1045716.n5.nabble.com/Using-fphttpclient-to-simulate-web-action-sequence-tp5721642.html
Sent from the Free Pascal - General mailing list archive at Nabble.com.



More information about the fpc-pascal mailing list