【问题标题】:PHP Header Redirect with Values from a POST, Curl Problems带有来自 POST 的值的 PHP 标头重定向,卷曲问题
【发布时间】:2013-12-31 23:59:33
【问题描述】:

我知道对此还有其他答案,但我已经查看了它们,但仍然遇到问题。基本上有点击跟踪软件,并希望从表单提交中传递几个不同的 ID。

这是我尝试过的:

 if(isset($_POST['pid']))     
 $pid   = $_POST['pid']; 
 $Curl_Session = curl_init('http://myurl/db/click.php?c=8&key=XXX');
 curl_setopt ($Curl_Session, CURLOPT_POST, 1);
 curl_setopt ($Curl_Session, CURLOPT_POSTFIELDS, "pid=$pid");
 curl_setopt ($Curl_Session, CURLOPT_FOLLOWLOCATION, 1);
 curl_exec ($Curl_Session);
 curl_close ($Curl_Session);
 header("Location:http://myurl/cgi-bin/thanks.php");

但没有最后一个标题行(我希望它重定向到 curl url)。在这个网站上找到它:http://www.askapache.com/php/sending-post-form-data-php-curl.html#Sending_POST_data_placing_response_variable

当我运行上述程序时,它会进入 404 页面?我尝试将 c=8&key= 移动到 curlopt_postfields,但这导致跟踪软件无法正常工作。

我做错了什么,我应该这样做吗?

最终我想做的是:

header("Location:http://myurl/db/click.php?c=8&key=XXX&pid=" . $_POST['pid']);

但是这个ofc不起作用。

谢谢!

【问题讨论】:

  • 404 表示网址错误。
  • 不,404 表示“页面未找到”,但不是“URL 错误”,这将具有不同的含义
  • 直接在浏览器中输入重定向网址会发生什么?
  • 你的意思是我想要的网址?有用。我知道 404 是什么意思:D.
  • 好的,有点想通了。我发送流量的地方和我的服务器都有相同的 404 页面。所以为了确认我在打什么,我添加了 google.com。 ....它正在提交到 URL,但有些东西是“关闭”的,因为它搞砸了 c= 或 key=

标签: php curl


【解决方案1】:

当您在CURL 中使用CURLOPT_FOLLOWLOCATION 时,如果重定向它会丢失cookie,并且您在下一步中不知道这些发布值的任何线索,只需添加一个值为'-' 的新CURLOPT_COOKIEJAR,即stdOut 这有助于在没有 cookie 文件的情况下保留 cookie,并最终引导您使用 cookie 进行下一步,以便下一步将您识别为以前的访问者。

 curl_setopt ($Curl_Session, CURLOPT_COOKIEJAR, '-');

更新: 好吧,如果您将脚本重定向到该页面,则需要在重定向时随身携带 cookie;您必须从 CURL 捕获 cookie 并将它们设置在您的脚本中。

setcookie('COOKIE NAME FROM CURL RESULT', 'COOKIE VALUE FROM CURL RESULT', 60 * 60 *24 /* YOU CAN EXTRACT FROM CURL COOKIE RESULT */);
header("Location:http://myurl/cgi-bin/thanks.php");

【讨论】:

    【解决方案2】:

    那么,用户正在对您的网站页面进行 POST,而您的响应是 301 Moved Permanently http 代码?

    让我们阅读 RFC 2616(关于 HTTP ......)

    10.3.2 301 永久移动

    [...]

    如果收到 301 状态代码以响应请求,而不是 GET 或 HEAD,用户代理不能自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。

    注意:当收到一个 POST 请求后自动重定向 301 状态码,一些现有的 HTTP/1.0 用户代理会错误地 将其更改为 GET 请求。

    因此,用户第一次发送表单时,将 POST 发送到: [您的页面] 在 CURL 部分之后,您返回一个 301 代码,该代码将使浏览器重定向。 执行 GET 到位置:http://myurl.com/cgi-bin/thanks.php。 但这只有在 curl 输出任何代码或错误时才会发生。

    确保在第一个请求、post 字段中设置了 pid,否则在重定向之前您将收到 PHP NOTICE/WARNING。这将使重定向不起作用。

    评论您的 CURL 代码,看看您的重定向是否有效。如果有效,则表示重定向代码之前的某些内容正在 HTML 上输出某些内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2015-02-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多