首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi XE10.1中卷曲的使用/解析

Delphi XE10.1中卷曲的使用/解析
EN

Stack Overflow用户
提问于 2017-05-18 11:14:49
回答 1查看 4.2K关注 0票数 2

我有这个卷曲序列,在MS中工作,我正在尝试使用与DelphiXE10.1柏林的Indy的等价性。

卷曲代码如下:

代码语言:javascript
复制
curl -k "https://fakeweb.com/options" --data-binary "{\"name\":\"Name of the Client\",\"email\":\"fake@gmail.com\"}"

我尝试过以下代码,但它不起作用

代码语言:javascript
复制
procedure TForm2.Button4Click(Sender: TObject);
const
  COMI = Char(34);
var
  data: string;
  DataToSend : TStringStream;
  IdHTTP: TIdHTTP;
  Answer: string;
begin
  try
    data := '{\' + COMI  + 'name\' + COMI  + ':\' + COMI  + 'Name of the Client\' + COMI  +
          ',\' + COMI  + 'email\' + COMI  + ':\' + COMI   + 'fake@gmail.com\' + COMI  + '}' ;

    DataToSend := TStringStream.Create(data);

    IdHTTP := TIdHTTP.Create(Application);

    IdHTTP.Request.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,';
    IdHTTP.Request.ContentType := 'application/json, text/plain; q=0.9, text/html;q=0.8,';

    Answer := IdHTTP.Post('https://fakeweb.com/options', DataToSend);    //its not the real URL

    ShowMessage(Answer);
  except on E: Exception do
    ShowMessage('Error: '+E.ToString);
  end;
end;

我总是收到相同的消息: HTTP/1.1 500内部Srever错误。有人能帮我吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 17:01:30

您的代码有三个问题:

  1. 您正在破坏JSON字符串,这可能会导致HTTP错误。斜杠字符在Delphi字符串文本中不用作转义序列(它甚至不是curl本身的转义序列。它是命令行处理器所需要的),因此您正在张贴实际的斜杠字符,这些字符根本不属于您的JSON数据。另外,虽然在技术上没有错误,但是您的COMI常量是不必要的,因为Delphi使用'来引用,所以您可以安全地使用",就像字符串数据中的- is。
  2. 您正在将TIdHTTP.Request.ContentType属性设置为无效值,这也可能导致HTTP错误。
  3. 如果这段代码是在Windows或OSX上运行的,那么您正在泄漏正在创建的对象(嗯,TIdHTTP对象并没有完全“泄漏”,但它直到应用程序退出时才被销毁)。如果代码在iOS或Android上运行,则没有泄漏。

试一试:

代码语言:javascript
复制
procedure TForm2.Button4Click(Sender: TObject);
var
  data: string;
  DataToSend : TStringStream;
  IdHTTP: TIdHTTP;
  Answer: string;
begin
  try
    data := '{"name":"Name of the Client","email":"fake@gmail.com"}';
    DataToSend := TStringStream.Create(data, TEncoding.UTF8);
    try
      IdHTTP := TIdHTTP.Create(nil);
      try
        IdHTTP.Request.Accept := 'application/json, text/plain;q=0.9, text/html;q=0.8';
        IdHTTP.Request.ContentType := 'application/json';
        Answer := IdHTTP.Post('https://fakeweb.com/options', DataToSend);    
      finally
        IdHTTP.Free;
      end;
    finally
      DataToSend.Free;
    end;
    ShowMessage(Answer);
  except
    on E: Exception do
      ShowMessage('Error: '+E.ToString);
  end;
end;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44046231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档