Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Indy组件(Delphi XE6)在Post上添加cookie?_Delphi_Http_Indy_Delphi Xe6 - Fatal编程技术网

使用Indy组件(Delphi XE6)在Post上添加cookie?

使用Indy组件(Delphi XE6)在Post上添加cookie?,delphi,http,indy,delphi-xe6,Delphi,Http,Indy,Delphi Xe6,我有一个cookiesmanager以表单的形式连接到IdHTTP组件 var XMLRqst : string; XMLResponse : TStringStream; XMLRequest : TStringStream; ... begin ... IdHTTP1.CookieManager.CookieCollection.Add; IdHTTP1.CookieManager.CookieCollection[ IdHTTP1.CookieManage

我有一个cookiesmanager以表单的形式连接到IdHTTP组件

var
  XMLRqst     : string;
  XMLResponse : TStringStream;
  XMLRequest  : TStringStream;
...
begin
...
   IdHTTP1.CookieManager.CookieCollection.Add;
   IdHTTP1.CookieManager.CookieCollection[ IdHTTP1.CookieManager.CookieCollection.Count -1 ].CookieName := 'data';
   IdHTTP1.CookieManager.CookieCollection[ IdHTTP1.CookieManager.CookieCollection.Count -1 ].Value      := '<root user="yyy" company="xxxx">';
   IdHTTP1.CookieManager.CookieCollection[ IdHTTP1.CookieManager.CookieCollection.Count -1 ].Path       := '/';

...
XMLRequest  := TStringStream.Create( XMLRqst, TEncoding.Unicode );
...
idHTTP1.Post( 'http://mysite/api', XMLRequest, XMLResponse );
idHTTP1.Disconnect;
var
XMLRqst:字符串;
XMLResponse:TStringStream;
XMLRequest:TStringStream;
...
开始
...
IdHTTP1.CookieManager.CookieCollection.Add;
IdHTTP1.CookieManager.CookieCollection[IdHTTP1.CookieManager.CookieCollection.Count-1].CookieName:=“数据”;
IdHTTP1.CookieManager.CookieCollection[IdHTTP1.CookieManager.CookieCollection.Count-1]。值:=“”;
IdHTTP1.CookieManager.CookieCollection[IdHTTP1.CookieManager.CookieCollection.Count-1]。路径:=“/”;
...
XMLRequest:=TStringStream.Create(XMLRqst,TEncoding.Unicode);
...
idHTTP1.Post('http://mysite/api,XMLRequest,XMLResponse);
idHTTP1.断开连接;
我从未收到“数据”cookie

  • 如何通过DelphiXe6中Indy的IdHTTP组件正确发送http post cookie

    • 以下是一些工作代码:

      procedure SendACookie;
      var
        HTTP: TIdHTTP;
        URI: TIdURI;
        ASource: TStringStream;
      begin
        HTTP := TIdHTTP.Create;
        try
          HTTP.CookieManager := TIdCookieManager.Create(HTTP);
      
          URI := TIdURI.Create('http://localhost');
          try
            HTTP.CookieManager.AddServerCookie('habari=mycookievalue', URI);
          finally
            URI.Free;
          end;
      
          ASource := TStringStream.Create('');
          try
            WriteLn('POST response:');
            WriteLn(HTTP.Post('http://localhost/cookies/', ASource));
          finally
            ASource.Free;
          end;
        finally
          HTTP.Free;
        end;
      end;
      
      服务器端(使用基于Indy的HTTP框架):

      过程TShowCookiesResource.OnPost(请求:TIdHTTPRequestInfo;响应:TIdHTTPResponseInfo);
      变量
      I:整数;
      曲奇:小甜饼;
      HTML:字符串;
      开始
      HTML:=''+#13#10;
      HTML:=HTML+格式(“%d个找到的cookies:

      ”+#13#10,[Request.cookies.Count]); 对于I:=0,请求.Cookies.Count-1 do 开始 Cookie:=请求.Cookies[I]; HTML:=HTML+格式('%s

      '+#13#10, [Cookie.CookieName+':'+Cookie.Value]); 结束; HTML:=HTML+“”; Response.ContentText:=HTML; Response.ContentType:=“text/html”; Response.CharSet:=“utf-8”; 结束;
      输出:

      Hit any key to send a cookie. POST response: 1 cookies found: habari: mycookievalue 按任意键发送cookie。 答复后: 发现1个cookies: 哈巴里:我的价值观
      TL;博士


      使用
      TIdHTTP.CookieManager.AddServerCookie
      方法将cookie添加到IdHTTP实例,该实例应随请求一起发送。

      以下是一些工作代码:

      procedure SendACookie;
      var
        HTTP: TIdHTTP;
        URI: TIdURI;
        ASource: TStringStream;
      begin
        HTTP := TIdHTTP.Create;
        try
          HTTP.CookieManager := TIdCookieManager.Create(HTTP);
      
          URI := TIdURI.Create('http://localhost');
          try
            HTTP.CookieManager.AddServerCookie('habari=mycookievalue', URI);
          finally
            URI.Free;
          end;
      
          ASource := TStringStream.Create('');
          try
            WriteLn('POST response:');
            WriteLn(HTTP.Post('http://localhost/cookies/', ASource));
          finally
            ASource.Free;
          end;
        finally
          HTTP.Free;
        end;
      end;
      
      服务器端(使用基于Indy的HTTP框架):

      过程TShowCookiesResource.OnPost(请求:TIdHTTPRequestInfo;响应:TIdHTTPResponseInfo);
      变量
      I:整数;
      曲奇:小甜饼;
      HTML:字符串;
      开始
      HTML:=''+#13#10;
      HTML:=HTML+格式(“%d个找到的cookies:

      ”+#13#10,[Request.cookies.Count]); 对于I:=0,请求.Cookies.Count-1 do 开始 Cookie:=请求.Cookies[I]; HTML:=HTML+格式('%s

      '+#13#10, [Cookie.CookieName+':'+Cookie.Value]); 结束; HTML:=HTML+“”; Response.ContentText:=HTML; Response.ContentType:=“text/html”; Response.CharSet:=“utf-8”; 结束;
      输出:

      Hit any key to send a cookie. POST response: 1 cookies found: habari: mycookievalue 按任意键发送cookie。 答复后: 发现1个cookies: 哈巴里:我的价值观
      TL;博士


      使用
      TIdHTTP.CookieManager.AddServerCookie
      方法将cookie添加到IdHTTP实例中,该实例应随请求一起发送。

      cookie不是由客户端创建的。服务器为客户端创建Cookie,客户端只保存服务器发送的内容,并在将来请求时将其发送回服务器。@Jerrydoge这是真的-当然,发送服务器不知道名称的Cookie是没有意义的。但是HTTP客户端必须能够构造一个具有已知名称和值的cookie并将其发送到服务器。@mjn:但Jerry试图解释的是,
      TIdCookieManager
      会自动为您处理该cookie。这是它的唯一目的-收集服务器发送的cookie,然后在适当的时候将这些cookie发送回服务器。您唯一应该手动创建cookie的时间是您需要在应用程序的多个会话中持久化cookie
      TIdCookieManager
      不会在应用程序关闭时持续保存cookie,您必须自己保存cookie,然后在下次运行应用程序时重新加载cookie。cookie不是由客户端创建的。服务器为客户端创建Cookie,客户端只保存服务器发送的内容,并在将来请求时将其发送回服务器。@Jerrydoge这是真的-当然,发送服务器不知道名称的Cookie是没有意义的。但是HTTP客户端必须能够构造一个具有已知名称和值的cookie并将其发送到服务器。@mjn:但Jerry试图解释的是,
      TIdCookieManager
      会自动为您处理该cookie。这是它的唯一目的-收集服务器发送的cookie,然后在适当的时候将这些cookie发送回服务器。您唯一应该手动创建cookie的时间是您需要在应用程序的多个会话中持久化cookie
      TIdCookieManager
      在应用程序关闭时不会持续保存cookie,您必须自己保存cookie,然后在下次运行应用程序时重新加载cookie。效果非常好。我理解代码的问题。谢谢美赞臣!:)工作起来很有魅力。我理解代码的问题。谢谢美赞臣!:)