在没有 Indy 或其他 3rd 方模块的情况下执行 Delphi POST [重复]

Posted

技术标签:

【中文标题】在没有 Indy 或其他 3rd 方模块的情况下执行 Delphi POST [重复]【英文标题】:Perform Delphi POST without Indy or other 3rd party module [duplicate] 【发布时间】:2013-06-13 09:11:40 【问题描述】:

有没有人了解纯 delphi 如何使用只有原生 Delphi 2010 功能的 Delphi 执行 Web POST?

【问题讨论】:

WinInet 是不是 Delphi 内置的模块? 不。这是part of Windows 【参考方案1】:
const chunksize = 512;                                 //<--neu

procedure TForm1.Button1Click(Sender: TObject);
var
content,data : string;

accept :  string;
buffer :Pchar;
hSession,hConnect,hRequest : HINTERNET;
bytesread:cardinal;                                           //<--edit
name,passwort :string;
begin
  GetMem(buffer, chunksize);                             //<--neu
  Name:= 'Loginname';
  Passwort :='Passwort';
  content := 'Content-Type: application/x-www-form-urlencoded';
  data := 'v=2&universe=uni34.ogame.de&login='+Name+'&pass='+Passwort+'&button.x=22&button.y=5';
  accept :='*/*';
  hSession := InternetOpen('MyAgent',INTERNET_OPEN_TYPE_PRECONFIG,nil, nil,0);
  hConnect := InternetConnect(hSession,'uni34.ogame.de',                           //<--edit
                              80,nil,nil,INTERNET_SERVICE_HTTP, 0, 1);
  hRequest := HttpOpenRequest(hconnect,
  'POST',
  'game/reg/login2.php',
  nil,
  nil,
  plpstr(accept),
  0,1);



  httpSendrequest(hRequest,pchar(content),length(content),pchar(data),length(data));

  //-->neu+edit<--//
  memo1.lines.clear;
  repeat
    FillMemory(buffer,chunksize,0); //0 wegen null-terminiertem string
    InternetReadFile(hRequest,
    buffer,
    chunksize-1,
    bytesread);
    memo1.Lines.Text:=memo1.lines.text+Trim(string(buffer));
  until bytesread = 0;

  FreeMem(buffer);
  //-->bis hier<--//
end;

来源: http://www.delphigl.com/forum/viewtopic.php?t=8198

【讨论】:

谢谢!我会以此为起点:)

以上是关于在没有 Indy 或其他 3rd 方模块的情况下执行 Delphi POST [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular/NodeJS/ExpressJS 向 3rd 方 URL 的 POST 请求

当前为浏览器导入 3rd 方 JS 节点模块的方法是啥?

在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏

有没有办法以编程方式为 iOS 上的 3rd 方应用程序获取 UI 层次结构?

为 GCM 实现 3rd 方应用服务器

如何在不使用 3rd 方服务的情况下使用 WCF 将推送通知发送到单独的 Android 设备?