我有一个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);
示例场景:
答案 0 :(得分:0)
检查$redirect
。
如果是相对网址,则必须将协议+主机名+等添加到网址,否则您将最终使用本地服务器。