使用数据重定向卷曲请求

时间:2015-10-31 22:44:10

标签: php curl

我有一个PHP curl请求可行 - 但是,如果我将CURLOPT_FOLLOWLOCATION设置为1,则会使用postdata提交Curl帖子,捕获重定向页面HTML并将其发布到我的本地服务器上。

整个重定向都包含在我的本地服务器中,它实际上并没有将数据转移到重定向本身(这就是我想要的)。在我的post.php上下载几秒html后,它会重定向到找不到的页面。

但是,如果我将CURLOPT_FOLLOWLOCATION设置为0,然后获取正确的网址,然后将其重定向到header("Location: $redirect"); - 它就可以正常传输,但不会传输更多数据。

将数据传输到新标头位置的最佳方法是什么。

$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);

示例场景:

  • 用户提交帖子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

1 个答案:

答案 0 :(得分:0)

检查$redirect

的值

如果是相对网址,则必须将协议+主机名+等添加到网址,否则您将最终使用本地服务器。