使用Delphi调用REST Web API

woobm2wo  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(375)

我有一个ASP.NET MVC Web API,我需要使用Delphi 6来调用它。我正在尝试使用Indy组件(版本9.0.18),我正在使用TIdHttp组件。

我使用REST方法,如POST来添加、PUT到UPDATE和DELETE来删除记录。我成功地添加、更新和获取了我的记录,但我无法成功地调用Delete方法。它会引发错误“HTTP/1.1 400 Bad Request”。

我试图调试Web API,但它认为请求没有到来,因为它不会在断点处停止。

我正在使用的Indy版本没有方法Delete,所以我尝试使用DoRequest方法。

我的代码是:

IdHTTP.DoRequest(hmDelete, 'http://localhost/myapp/api/user/1', nil, nil);

如果我使用Fiddler发出请求,它会工作,所以我的Web API工作得很好。

55ooxyrt

55ooxyrt1#

作为Indy的替代,我建议您使用“导入类型库...”从Project菜单中,选择“Microsoft XML”,这是可用的最高版本(我当前所在的机器上有版本3到6)。禁用“生成组件 Package ”,然后使用XMLHTTP组件进行REST调用。例如:

uses ActiveX, MSXML2_TLB;

var
  r:XMLHTTP;
begin
  CoInitialize(nil);
  r:=CoXMLHTTP.Create;
  r.open('DELETE','http://localhost/myapp/api/user/1',false,'','');
  //r.setRequestHeader(...
  r.send(EmptyParam);
  if r.status=200 then
7nbnzgx9

7nbnzgx92#

因此,另一个答案很简单,使用具有灵活后期绑定的COM对象,在GET或POST中实现的带有语言检测的REST转换服务的示例,在maXbox脚本中实现:

function getPostTranslateLibre(feedstream: string): string;
var
  Url,API_KEY, source: string;
  jo, locate: TJSONObject;
  httpReq,hr: Olevariant;
  strm: TStringStream;
begin
   httpReq:= CreateOleObject('WinHttp.WinHttpRequest.5.1');
  // Open the HTTPs connection.  
 try              
  hr:= httpReq.Open('POST','https://libretranslate.pussthecat.org/detect', false);
   httpReq.setRequestheader('user-agent',
      'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0');
  httpReq.setRequestheader('content-type','application/x-www-form-urlencoded');  
//httpReq.setRequestheader('X-RapidAPI-Host','nlp-  translation.p.rapidapi.com');   
//httpReq.setRequestheader('X-RapidAPI-Key','...333'); 

if hr= S_OK then HttpReq.Send('q='+HTTPEncode(feedstream));
 /// Send HTTP Post Request & get Responses. 

If HttpReq.Status = 200 Then
   result:= HttpReq.responseText
Else result:= 'Failed at getting   response:'+itoa(HttpReq.Status)+HttpReq.responseText;
//writeln('debug response '+HttpReq.GetAllResponseHeaders);     
 finally
  httpreq:= unassigned;  
 end;                  
end;

相关问题