HTTP.post与使用Delphi XE2的下载URL

HTTP.post与使用Delphi XE2的下载URL,delphi,curl,delphi-xe2,idhttp,Delphi,Curl,Delphi Xe2,Idhttp,我尝试对两种类型的下载使用相同的过程。两人都在工作 我想在两者上都使用TDownloadURL或HTTP.Post,但无法确定如何使用。哪种方法以及如何做到这一点?多谢各位 第一次手术-- 第二次手术-- TDownloadURL使用GET HTTP方法TIdHTTP.Post显然使用Post方法。一般来说,两者都不适合替代另一个。这就是为什么这两种方法首先都存在的原因 POST请求可以包含GET请求所能提供的所有信息,再加上更多信息,这使得它看起来应该能够完成GET所能做的一切,再加上更多信息

我尝试对两种类型的下载使用相同的过程。两人都在工作

我想在两者上都使用TDownloadURL或HTTP.Post,但无法确定如何使用。哪种方法以及如何做到这一点?多谢各位

第一次手术--

第二次手术--


TDownloadURL
使用GET HTTP方法
TIdHTTP.Post
显然使用Post方法。一般来说,两者都不适合替代另一个。这就是为什么这两种方法首先都存在的原因

POST请求可以包含GET请求所能提供的所有信息,再加上更多信息,这使得它看起来应该能够完成GET所能做的一切,再加上更多信息。但是,服务器不需要(也不应该期望)以与实际相同的方式处理POST请求

作为编写HTTP客户机的人,您并不能真正控制这种情况。服务器决定它将采用哪些方法。客户需要做他们期望的事情,或者被拒绝访问


Indy组件支持这两种方法,因此,如果您只想使POST代码和GET代码看起来相似,那么可以将
TDownloadURL
替换为
TIdHTTP。GET
TDownloadURL
使用GET HTTP方法
TIdHTTP.Post
显然使用Post方法。一般来说,两者都不适合替代另一个。这就是为什么这两种方法首先都存在的原因

POST请求可以包含GET请求所能提供的所有信息,再加上更多信息,这使得它看起来应该能够完成GET所能做的一切,再加上更多信息。但是,服务器不需要(也不应该期望)以与实际相同的方式处理POST请求

作为编写HTTP客户机的人,您并不能真正控制这种情况。服务器决定它将采用哪些方法。客户需要做他们期望的事情,或者被拒绝访问


Indy组件支持这两种方法,因此,如果您只是想让POST代码和GET代码看起来相似,那么您可以将
TDownloadURL
替换为
TIdHTTP.GET

我真的不明白您的问题是关于什么的。我只想对这两种URL使用downloadurl或http.POST(我有很多种类型)。。。我无法让它们中的任何一个同时使用这两种url结构。一个url需要参数列表,另一个不需要。如何让http.post同时使用这两种语言?谢谢。不同的URL需要不同的语义。为什么要尝试使相同的代码同时适用于这两种情况?您的第一个操作是将数据上载到服务器。第二个操作是从服务器下载文件。它们不是一回事
TDownloadURL
仅发送HTTP
GET
请求
TIdHTTP.Post()
只发送HTTP
Post
请求
TIdHTTP
还有用于发送HTTP
Get
请求的
Get()
方法。您不能随意更改。POST操作不同于GET,这是HTTP协议的工作方式。如果站点在您的控制下,您可以更改需要GET才能使用POST的站点,以便使用相同的代码。如果这些站点不在您的控制之下,您仍然可以要求其中一个站点的所有者提供一种方法来执行POST,以获得与get或viceversa相同的结果。我真的不明白您的问题是什么。我只想对这两个URL使用downloadurl或http.POST(每种类型我都有很多)。。。我无法让它们中的任何一个同时使用这两种url结构。一个url需要参数列表,另一个不需要。如何让http.post同时使用这两种语言?谢谢。不同的URL需要不同的语义。为什么要尝试使相同的代码同时适用于这两种情况?您的第一个操作是将数据上载到服务器。第二个操作是从服务器下载文件。它们不是一回事
TDownloadURL
仅发送HTTP
GET
请求
TIdHTTP.Post()
只发送HTTP
Post
请求
TIdHTTP
还有用于发送HTTP
Get
请求的
Get()
方法。您不能随意更改。POST操作不同于GET,这是HTTP协议的工作方式。如果站点在您的控制下,您可以更改需要GET才能使用POST的站点,以便使用相同的代码。如果这些站点不在您的控制之下,您仍然可以要求其中一个站点的所有者提供一种执行POST的方法,以获得与get或viceversa相同的结果。
 procedure TfrmMain.get1Click(Sender: TObject);
 var
json: string;
lHTTP: TIdHTTP;
lParamList: TStringList;
result:string;
begin
  json := CRLF +
          '{' + CRLF +
          ' "resource_id": "391792b5-9c0a-48a1-918f-2ee63caa1c54",' + CRLF +
          ' "filters": {' + CRLF +
          '   "provider_id": 393303' + CRLF +
          ' }' + CRLF +
          '}';
  lParamList := TStringList.Create;
  try
    lParamList.Add('somename='+json);
    lHTTP := TIdHTTP.Create(nil);
    try
     Result := lHTTP.Post('http://hub.Healthdata.gov/api/action/datastore_search', lParamList);
    finally
      lHTTP.Free;
    end;
  finally
    lParamList.Free;
  end;
end;
procedure TfrmMain.get2Click(Sender: TObject); 
var
  dl: TDownloadURL;
  url:string;

begin
url:='http://api.census.gov/data/2010/sf1?key=KEY&get=P0010001,NAME&for=state:*';
 dl := TDownloadURL.Create(self);
  try
    dl.URL := url;
    dl.FileName := execpath+'api1.txt'; dl.ExecuteTarget(nil); dl.Free;
  except
    dl.Free;
  end;

end;