【问题标题】:PHP curl post and return second page informationPHP curl post并返回第二页信息
【发布时间】:2012-06-12 14:25:19
【问题描述】:

我不认为这是可以做到的,但任何想要挑战的人都可以尝试一下......

我创建了一个 PHP curl 脚本,它将变量发布到页面并返回源代码。

现在这里有点棘手......它发布的信息页面仅处理数据并显示加载屏幕,一旦处理数据,它就会进入他们的屏幕以显示结果。这是我想返回的第三页。有什么想法吗?

当前脚本:

extract($_POST);

//set POST variables
$url = 'http://check.domain.co.uk/loading.php';
$fields = array(
        'field1'=>urlencode($field1),
        'field1'=>urlencode($field2),
        'field1'=>urlencode($field2)
    );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

以下是第一个和第二个 url 的示例(不是真实的):

http://check.domain.co.uk/loading.php

http://check.domain.co.uk/instantaudit.php

【问题讨论】:

  • 您可能只需要遵循每个插页式页面问题的重定向最终到达结果页面。
  • 这是我最初的想法,但是如何让 curl 保持 10 秒,然后转到下一个 url,然后返回页面数据?
  • curl 不会这样做,您的代码会这样做:sleep(10).
  • 但是 curl_exec() 执行调用并返回,所以我可以看到如何执行调用并在 10 秒后返回数据?
  • html 表单也不会发布数据,然后在那里等待 10 秒。很可能该站点只是设置了一个 javascript 计时器,然后在时间用完时告诉浏览器转到其他 URL。

标签: php post curl loading


【解决方案1】:

嗯,过去(在 Google 发布公共 api 之前),开发人员通常会执行此类技巧来登录并从 Analytics 或 Adsense 检索信息。

您可以从旧的PHP Adsense class 中获取灵感(看看他们如何反复使用 curl)。

基本上,解决方案真的很丑,并且在目标域更新其页面的html时可能会被破坏(因为您解析返回的html以获取链接):

  • 用所有参数卷曲第一页
  • 解析返回的内容以提取下一个url(检查AdSense类中的preg_match调用)
  • 卷曲解析后的url以检索下一个数据
  • 以此类推,直到获得所需的内容

我提醒您它不可能成为未来的可靠解决方案,因为最终确定性依赖于一个外部来源,该来源可能会随时间改变(并破坏您的流程)。

【讨论】:

  • 哦,那太丑了。对我来说幸运的是,当进行更改时,主持人会通知我,所以我应该没问题。我去看看,反馈意见。
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2012-08-21
  • 2012-12-16
  • 2021-10-22
  • 2017-11-25
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多