Indy HTTP Client:类似于Web浏览器的会话

时间:2010-09-01 18:15:50

标签: delphi session get c++builder indy

我正在网站上制作注册程序 为此,我使用C ++ Builder和Indy(TIdHTTP)。

工作原理:

  • 程序通过GET接收注册页面并从中提取CAPTCHA图片地址;
  • 下载CAPTCHA(GET)并将其提供给用户;
  • 在POST请求中将用户提供的数据发送到网站。

问题:CAPTCHA代码始终不正确。这必须是因为在这三次调用网站之间的某个地方,CAPTCHA挑战发生了变化。

为了防止这种情况,必须以某种方式连接这些请求 所以我认为,这里需要某种sessions支持......

请告诉我如何在Delphi或C ++ Builder中实现这一目标

编辑:

由于Runner

,我发现会话ID存储在Cookie中

4 个答案:

答案 0 :(得分:2)

对我而言,序列似乎是正确的。只需检查发布CAPTCHA回复时的问题,即可提供ID以告知CAPTCHA是哪个。

对我而言,听起来您的POST未被识别为特定请求。换句话说,您可能没有将响应与特定用户相关联。当您第一次调用GET并从服务器返回CAPTCHA时,服务器必须为您提供返回的CAPTCHA的唯一ID。这可以是一个唯一的URL,一个cookie,一个嵌入HTML中的字段等等......

这是我对你的描述的猜测。

编辑:

我有更多信息。它显然是一个PHP服务器。从“BlaXpirit”提供的页面:

  

访问您网站的访问者是   分配了一个唯一的id,即所谓的   会话ID。这要么存储在   用户方面的cookie或是   在URL中传播。

因此,如果ID在cookie中,那么我猜你没有发回cookie。你是这里的中间人,就像这样。

  1. 您对CAPTCHA服务器进行GET。
  2. 您收到包含Cookie
  3. 的回复
  4. 您将CAPTCHA发送回客户端,但不发送cookie。
  5. 您应该将cookie发送到客户端,然后返回CAPTCHA服务器,或者拥有自己的会话管理,存储CAPTCHA cookie,在他/她发送响应时识别客户端,并将带有响应的cookie发送回CAPTCHA服务器。

答案 1 :(得分:2)

如果服务器在cookie中发送了PHP会话ID,请确保使用的是最新版本的Indy。 Indy 10的cookie处理已经被打破了一段时间,但我最近检查了Indy的cookie管理的新代码,以解决很多问题。

如果服务器在注册表单的隐藏字段中发送了PHP会话ID,那么您需要确保在发回的POST数据中包含该ID。

答案 2 :(得分:0)

使用 IdCookieHandler 并将其链接到IdHTTP对象。然后所有的cookie /会话管理内容将由Indy 自动完成。

如果您希望使用真实会话支持和Web自动化(包括注册),这是最快速,最干净的解决方案。

答案 3 :(得分:-1)

让我猜猜,嗯......我打赌你注册雅虎:)无论如何,对于大多数流行的邮件提供商来说,它并不那么容易,有一些javascripts可以防止自动注册。这些脚本可以动态生成cookie或POST字段。