【问题标题】:cURL not redirecting properlycURL 没有正确重定向
【发布时间】:2013-12-09 12:30:36
【问题描述】:

我在这里阅读了很多 cURL 问题,但似乎都没有遇到与我相同的问题。

我设置了一个表单来提交以下内容:

if(isset($_POST['submitted_form']) && $_POST['submitted_form'] == "yes"){
    $ch = curl_init("https://www.pipelinedeals.com/web_lead");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_REFERER, "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."");
    curl_setopt($ch, CURLOPT_POSTFIELDS, "developer_mode=".$_POST['developer_mode']."&thank_you_page=".$_POST['thank_you_page']."&w2lid=".$_POST['w2lid']."&assign_to_id=".$_POST['assign_to_id']."&lead[lead_source]=".$_POST['lead[lead_source]']."&lead[full_name]=".$_POST['lead[full_name]']."&lead[phone]=".$_POST['lead[phone]']."&lead[email]=".$_POST['lead[email]']."");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($ch);
    curl_close($ch);
}

在有人问我为什么要使用如此复杂的方法来发布数据而不是仅仅提交表单之前,这是因为我想在将数据传递给 PipelineDeals 之前将其用于其他目的。

它非常接近正常工作,我可以品尝它。我的问题是,当我在“http://exampledomain.com”上运行代码时,它会继续并完美地发布数据。问题是它没有正确执行重定向。

发生的是数据发布。 “http://exampledomain.com”留在地址栏,“https://www.pipelinedeals.com/web_lead”的内容在页面上加载(并以显示收到帖子的方式加载),然后“http://exampledomain.com”的内容在其下加载.就像 cURL 是在拉取另一个页面的内容,而不是将用户重定向到它。

有什么建议吗?

【问题讨论】:

    标签: php post redirect curl


    【解决方案1】:

    这就像 cURL 正在拉入另一个页面的内容,而不是 而不是将用户重定向到它。

    cURL 实际上不会将用户重定向到相关页面。客户端的浏览器完全不知道 cURL 正在做什么。就浏览器而言,它只是从您的服务器(正在执行 POST 请求)接收此数据。

    要解决这个问题,您可能需要设置一个隐藏表单,然后通过 JavaScript 提交该表单。小例子:

    <form id="pipeline" action="https://www.pipelinedeals.com/web_lead" method="post">
        <input type="hidden" name="w2lid" value="<?php echo $_POST['w2lid']; ?>">
        <!-- the rest of your POST vars -->
    </form>
    

    还有 JS:

    document.getElementById('pipeline').submit();
    

    【讨论】:

      【解决方案2】:

      因为这正是 curl 所做的。它会抓取您请求的输出,然后您可以根据需要用它做一些花哨的事情,然后您可以使用该信息来呈现您自己的页面。

      你不是在找:header("Location:http://www.example.com/"); /* 重定向浏览器 */ http://php.net/manual/en/function.header.php

      (当然可能与 CURL 一起使用)

      【讨论】:

      • 如果我使用 Header,我不能将数据发布到 PipelineDeals,但可以吗?我仍然可以将帖子卷曲,但用户最终看到的将是页面的一个版本,就好像帖子没有发生一样?
      • @FerdiaO'Brien 标头重定向将独立于 cURL 请求,因此没有真正的方法将两者联系在一起。
      • 当。感谢您提供信息,看起来它又回到了绘图板上。您上面的建议似乎是实现我想要韦恩的最佳方式。
      • 如果您正在处理 GET 请求,您仍然可以使用:header("location: https://www.pipelinedeals.com/web_lead?developer_mode=DEVMODE&amp;thank_you_page=TYPAGE&amp;w2lid=W2LID&amp;assign_to_id=ASSIGNID&amp;lead[lead_source]=LEADSRC&amp;lead[full_name]=LEADFN&amp;lead[phone]=LEADTEL&amp;lead[email]=LEADMAIL");
      • 不幸的是不是 Viridis。它必须通过某种方法进行 POST。相信我的老板想要管道集成以及其他东西 :) 不过感谢您的建议。
      猜你喜欢
      • 2020-02-10
      • 2018-04-14
      • 2021-12-06
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 2019-09-09
      • 2019-03-25
      相关资源
      最近更新 更多