卷曲将数据发送到外部网站并重定向

时间:2015-11-01 11:03:46

标签: php curl

我目前正在连接外部网址并向其发送一个url编码的xml文件。我正在使用CURL来发送它正常工作。

问题: 当用户访问index.html并输入金额时,按提交,它们将被带到post.php(表单提交给CURL)。

因此,信息提交正常,但网址跟随不起作用。我的意思是,在post.php上,它会从该页面下载所有响应,然后一段时间后它就会失败。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'postdata=' . urlencode(xmlGrab()));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

// Download the given URL, and return output
$output = curl_exec($ch);
$headers = substr($output, 0, $curl_info["header_size"]); //split out header
$redirect = curl_getinfo($ch)['redirect_url'];

header('HTTP/1.1 307 Temporary Redirect');
header("Location: $redirect");

// Close the cURL resource, and free system resources
curl_close($ch);

我认为如果我禁用CURLOPT_FOLLOWLOCATION并手动找到redirect_url然后继续转到那个标题,那就行了。但数据不再存在。

情景

  • 用户提交帖子http://localhost:8888/post.php
  • Post.php包含与google.co.uk的连接
  • Post.php连接并发帖到google.co.uk
  • 请求将google.co.uk?q=blahblah下载到post.php
  • post.php看起来很像google.co.uk?q=blahblah
  • 3秒后,它重定向到http; // localhost:8888 /?q = blahblah

我想达到什么目标?

  • 用户提交帖子http://localhost:8888/post.php
  • Post.php包含与google.co.uk的连接
  • Post.php连接并发帖到google.co.uk
  • 它正确地重定向到google.co.uk?q=blahblah
  • 用户现在在google.co.uk而不是开发环境

2 个答案:

答案 0 :(得分:0)

使用simple html dom parser并再次构建dom,在显示之后,希望不会再次重定向。

$page = get_response_from_server();   // your curl function
echo $page = str_get_html($page);    //will stay here(hopefully).

我仔细查看了响应标头,我在标题

上找到了
Refresh:8;URL=/some_page.

使用此标头,它会在some_page之后重定向到8 seconds。 所以,在我看来,改变

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

可能有帮助。

答案 1 :(得分:-2)

从以下位置更改此行:

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

为:

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

0 - >不要设置任何行为。

删除此行:

  curl_setopt($ch, CURLOPT_POST, 1);