internetteki sayfaya komut vererek yönlendirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

internetteki sayfaya komut vererek yönlendirme

Mesaj gönderen sabanakman »

İyi çalışmalar;

Bir web sayfasında bulunan file nesnesi üzeriden nasıl post işlemi yapabilirim. Asıl ihtiyacım olanı örnekle açıklarsam; http://www.rapidshare.com adresinden direk delphi kodlarıyla bilgisayarımdan dosya gönderme işlemini nasıl yapabilirim (oradaki ilk sayfayı geçsem yeter :D şimdilik))?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Mesaj gönderen pasa_yasar »

bende buna benzer bir başlık açacaktım soru sorulmuş. dışarıdan macro kaydetme gibi fareyi yönlendiremezmiyiz acaba. sayfaya tıklama yapmak için.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Kod: Tümünü seç

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;
    FInitial: Boolean;
    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;
  FInitial := True;
  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;
// Malikyar -- Removed the Content_length parameter since the web buffer did not contain it.
{
  sFormFieldInfo := Format(CRLF + '--' + Boundary + CRLF + CONTENT_DISPOSITION +
    FILE_NAME_PLACE_HOLDER + CRLF + CONTENT_LENGTH +
      CONTENT_TYPE_PLACE_HOLDER, [FieldName, FileName, iSize, ContentType]);
}
  sFormFieldInfo := Format(CRLF + '--' + Boundary + CRLF + CONTENT_DISPOSITION +
    FILE_NAME_PLACE_HOLDER + CRLF +
      CONTENT_TYPE_PLACE_HOLDER, [FieldName, FileName, 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
// Add a check to see if it's the initial field being added.  If so, then do not preface with a CRLF.
   if FInitial then
   begin
     sFormFieldInfo :=
       Format('--' + Boundary + CRLF + CONTENT_DISPOSITION + CRLF + CRLF +
         FieldValue, [FieldName]);
     FInitial := False;
   end
   else
     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;
  FInitial := True;
end;

end.
kullanımı..

Kod: Tümünü seç

function SendFile(FileName : String) : String;
var
  ResponseStream: TMemoryStream;
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
begin
  MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
  ResponseStream := TMemoryStream.Create;
  try
    IdHttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;
    MultiPartFormDataStream.AddFile('userfile[]', FileName, 'multipart/form-data');
    MultiPartFormDataStream.PrepareStreamForDispatch;
    MultiPartFormDataStream.Position := 0;
    IdHTTP1.Post('upload.php', MultiPartFormDataStream, ResponseStream);
  finally
    Result := GetLink(ResponseStream);
    MultiPartFormDataStream.Free;
    ResponseStream.Free;
  end;
end;
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@lazio'nun örneği güzel.. :wink:

- Ek olarak başka bir açıdan bir arka kapı da bulunabilir. Şöyle ki, bu tip durumlarda Download veya Upload manager varmıyı araştırıp oradan çıkış noktası arıyorum. Rapidshare ise bize bu imkanı sunmuş. RapidUploader diye bir araç hazırlamışlar.

- Bunu sitesinden indirip irdeleyebilirsin.

- Başlangıç olması adına ben senin için indirip inceledim. Delphi 7 ile yazılmış olduğunu görmek pek şaşırtmadı :idea:

- CommView ile alınan/gönderilen paketleri inceleyince kullanılan CGI noktaları açıkça görülüyor. Zahmetli bir çalışma ile protokol çözümlenebilir gibi görünüyor.

Kod: Tümünü seç

..ó.Ğ..ÀŸ›fS..E.
.R†@.€.&§....Ãz
ƒú.M.Py.q7¸g>ŸP.
ÿÿü’..GET /cgi-b
in/upload.cgi?in
tsysdata=1 HTTP/
1.1..Connection:
 Keep-Alive..Hos
t: rapidshare.co
m..Accept: text/
xml, */*..Accept
-Charset: iSO-88
59-1,utf-8;q=0.7
,*;q=0.7..Accept
-Encoding: ident
ity..Accept-Lang
uage: de-de;q=0.
5,en;q=0.3..Refe
rer: http://rapi
dshare.com/..Use
r-Agent: RapidUp
loader[v1,1]....
- RapidUploader'dan farklı olarak yapmak istediğin başka bişey varsa onu da yazar mısın :?:
Resim
Resim ....Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aslında asıl sorunum SSK'ya otomatik eBildirge gönderebilmek. Soruyu şimdiki gibi uzun uzun yazmadım da kısa yoldan benzerlerini örnek vererek sormaya çalıştım. şimdilik TWebBrowser bileşenini kullanarak işlem yapmaya çalıştım ama farklı önerilere de açığım (olmak zorundayım)? Şekildeki sayfadan oturum açma işlemini yapabiliyorum (post metoduyla).

Şekil 1
Resim

Daha sonra gerekli linkleri tıklayarak eBildirge için xml dosya gönderebilme sayfasını da sorunsuz bir şekilde açabiliyorum.

Şekil 2
Resim

İşte problem burada ve bundan sonrasında. Burdan geçersiz bir dosya gönderilince gelen sayfa şekildeki gibi.

Şekil 3
Resim

Burada da geçerli bir dosya sonrası gelen sayfanın şekli görünmektedir.

Şekil 4
Resim

2. şekilde görünen sayfayı program kodlarıyla hallettikten sonra (3. veya 4. şekilde görünen sayfaya geçince) gelen sayfayı kullanıcıya bırakarak gerekli onay, kontrol veya başka işlemleri kullanıcının yapmasını sağlamak. Yapamadığım işlem belirlediğim bir dosyayı gönderememek. MSHTML ünitesinde bulunan arabirimleri kullanarak (IHTMLInputFileElement) buraya yazılan değeri okuyabiliyorum ama kodla yazamıyorum (MSDN açıklamasında bu değer kullanıcı girişinden sonra okunan bir özellik olduğu yazıyordu). Hatta gönder tuşuna bile basabiliyorum (.click). Yine yanlış yolda mı gidiyorum nedir. Ayrıca verdiğiniz bilgiler için teşekkür ederim ve hemen kütüphaneme ekledim bile :D .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
tarikogut
Üye
Mesajlar: 32
Kayıt: 11 Nis 2006 04:31

Mesaj gönderen tarikogut »

bununla ilgili kod yapmıştım zannedersem

WebBrowser1.OleObject.documents kısmındaki referanslara bakarsan zannedersem sorununu çözücektir. bütün iş oleobjecte bitiyor.
100 Adet Dedicated Server
Vpn Network Uzmanlığı
3 Gbit Internet Connection
Cevapla