簡體   English   中英

名稱為indy的隨機名稱時發布Webform數據

[英]Posting webform data when the names are random with indy

我正在嘗試創建https://umod.org/login的登錄名,但是我很難理解它的工作原理。 為什么要創建登錄名? 他們的站點API的訪客速率限制為40,會員的速率限制為100。 我基本上想在使用api時保持登錄會話。

我的理解是,我需要以某種方式登錄並獲取Cookie。

我一直在看一些帖子,但因為無法正常工作而感到沮喪。 我發現了這樣的問題: 從DelphiDelphi 登錄到網站 -從使您有所了解的代碼登錄到網頁

那我做了什么? 我使用了inspect元素來獲取登錄頁面上輸入字段的字段名稱。 電子郵件字段具有一個名為電子郵件的ID,但是當我點擊刷新時,這兩個字段的名稱都會更改。

我編寫了以下代碼,但沒有成功:

procedure Login(const aUsername, aPassword: string);
var
  http: TIdHTTP;
  ssl: TIdSSLIOHandlerSocketOpenSSL;
  params: TStringList;
begin
  http := TIdHTTP.Create(nil);
  try
    ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
      http.IOHandler := ssl;
      http.HandleRedirects := True;
      http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0';
      http.AllowCookies := True;

      http.Get('https://umod.org/login');

      params := TStringList.Create;
      try
        params.Add('email=' + aUsername);
        params.Add('password=' + aPassword);
        params.Add('remember=1');
        params.Add('redirect=https://umod.org/');

        http.Post('https://umod.org/login', params);
      finally
        params.Free;
      end;
    finally
      ssl.Free;
    end;
  finally
    http.Free;
  end;
end;

我收到以下錯誤: EIdHTTPProtocolException: HTTP/1.1 419 unknown status

Get() Web表單頁面的HTML之后,需要解析HTML以找到適當的<form>元素,並提取所有需要提交回服務器的<input>元素。

該解析將為您提供實際名稱(尤其是隨機生成的名稱)和您需要放入TStringList非用戶提供的值。

必須提交具有非empy value屬性(如果未由用戶提供)的任何<input>元素(尤其是“隱藏”元素)。

這正是Web瀏覽器將要執行的操作,也是服務器希望您執行的操作。 Indy不會幫助您進行解析,您需要自己處理。 如果您四處看看,有很多HTML解析器可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM