WebBrowser ile dosyanın post edilmesi

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)

WebBrowser ile dosyanın post edilmesi

Mesaj gönderen sabanakman »

İyi günler. Dosya yüklenen bir siteye aşağıdaki kodla dosyayı post ederek yükleyebiliyoruz.

Kod: Tümünü seç

uses IdGlobalProtocols;
procedure UploadFilesHttpPost(const wb: TWebBrowser; const URLstring: string; names, values, nFiles, vFiles: array of string);
var
  strData, n, v, boundary: string;
  URL: OleVariant;
  Flags: OleVariant;
  PostData: OleVariant;
  Headers: OleVariant;
  idx: Integer;
  ms: TMemoryStream;
  ss: TStringStream;
begin
  if Length(names) <> Length(values) then
    raise Exception.Create('UploadFilesHttpPost: Names and Values must have the same length.');
  if Length(nFiles) <> Length(vFiles) then
    raise Exception.Create('UploadFilesHttpPost: FileNames and FileValues must have the same length.');
  URL := 'about:blank';
  Flags := NavNoHistory or NavNoReadFromCache or NavNoWriteToCache or NavAllowAutosearch;
  wb.Navigate2(URL, Flags);
  while wb.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
    // anything random that WILL NOT occur in the data.
  boundary := '---------------------------123456789';
  strData := '';
  for idx := Low(names) to High(names) do
  begin
    n := names[idx];
    v := values[idx];
    strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"' + #13#10#13#10 + v + #13#10;
  end;

  for idx := Low(nFiles) to High(nFiles) do
  begin
    n := nFiles[idx];
    v := vFiles[idx];
    strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"; filename="' + v + '"' + #13#10;
    if v = '' then
    begin
      strData := strData + 'Content-Transfer-Encoding: binary';
    end
    else
    begin
      strData := strData + 'Content-Type: '+GetMIMETypeFromFile(v)+#13#10#13#10;
      ms := TMemoryStream.Create;
      try
        ms.LoadFromFile(v);
        ss := TStringStream.Create('');
        try
          ss.CopyFrom(ms, ms.Size);
          strData := strData + ss.DataString + #13#10;
        finally
          ss.Free;
        end;
      finally
        ms.Free;
      end;
    end;
    strData := strData + '--' + boundary + '--'#13#10; // FOOTER
  end;
  strData := strData + #0;    {2. you must convert a string into variant array of bytes and every character from string is a value in array}
  PostData := VarArrayCreate([0, Length(strData) - 1], varByte);    { copy the ordinal value of the character into the PostData array}
  for idx := 1 to Length(strData) do
    PostData[idx - 1] := Byte(Ord(strData[idx]));    {3. prepare headers which will be sent to remote web-server}
  Headers := 'Content-Type: multipart/form-data; boundary=' + boundary + #13#10;    {4. you must navigate to the URL with your script and send as parameters your array with POST-data and headers}
  URL := URLstring;
  wb.Navigate2(URL, Flags, EmptyParam, PostData, Headers);
  while wb.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
end;
Bu kodla, http://validator.w3.org/#validate-by-upload sitesinde bulunan xml doğrulayıcı sayfayı

Kod: Tümünü seç

UploadFilesHttpPost(webEk, 'http://validator.w3.org/check', [], [], ['uploaded_file'], ['C:\Users\ŞabanŞahin\Desktop\dosya\ornek.xml'] );
şeklinde kullanarak dosyayı upload edebiliyoruz ve benzeri basit yapıda diğer sitelerde de bu çalışıyor fakat aşağıdaki örneklerini verdiğim sayfalarda bu işi bir türlü aşamadım. Dikkatimden kaçan bir şey mi var anlayamadım vesselam :D . Bu örnek sitelerde fileupload nasıl yapılır çözemedim ama çözebilen çıkarsa çok makbule geçecek :mrgreen: .
İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: WebBrowser ile dosyanın post edilmesi

Mesaj gönderen ertank »

Merhaba,

Dikkat ederseniz örnek verdiğiniz siteler https yani güvenli bağlantı kuran siteler. Okunabilir şekilde veri kabul etmezler sizden.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: WebBrowser ile dosyanın post edilmesi

Mesaj gönderen sabanakman »

Sorun sanırım yeni teknolojilerle geliştirilen sayfalarla alakalı olabilir. Zira https://ebeyanname.gib.gov.tr/index.html ile giriş yapıp dosyaı örnekteki prosedür ile post edilebiliyor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: WebBrowser ile dosyanın post edilmesi

Mesaj gönderen hakanharbeli »

Hocam "start upload" butonunun name'i tanımlanmamış sitede. Butona clicklettirmen lazım herhalde. Name'i tanımlanmamış butonlara da click yapamazsın. name="upload" gibi tanımlanmalı butonu da dosya yolunu yazacağın textbox da...
Cevapla