PHP标头重定向与POST,卷曲问题的值

时间:2013-12-31 23:59:33

标签: php curl

我知道还有其他答案,我看了看他们但仍然遇到麻烦。基本上有点击跟踪软件,并希望从表单提交中传递几个不同的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网址)。在此网站找到它: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不起作用。

谢谢!

2 个答案:

答案 0 :(得分:0)

当您在CURLOPT_FOLLOWLOCATION中使用CURL时,如果重定向您将丢失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");

答案 1 :(得分:0)

那么,USER正在对你的网站页面进行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输出任何代码或错误时才会发生这种情况。

确保在第一个请求上,在帖子字段上设置了pid,否则您将在重定向之前获得PHP NOTICE / WARNING。这将使重定向无效。

评论您的CURL代码,看看您的重定向是否有效。如果工作,意味着重定向代码之前的某些内容正在HTML上输出内容。