2015-10-31 100 views
2

我有一個PHP curl請求可行 - 但是,如果我將CURLOPT_FOLLOWLOCATION設置爲1,Curl帖子會與postdata一起提交,重定向頁面HTML將被捕獲併發布在本地服務器上。使用數據重定向curl請求

整個重定向包含在我的本地服務器中,它實際上並沒有將數據轉移到重定向本身(這是我想要的)。在我的post.php上下載了幾秒鐘的html之後,它重定向到一個未找到的頁面。

但是,如果我將CURLOPT_FOLLOWLOCATION設置爲0,然後獲取正確的URL,然後通過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; //本地主機:8888/Q = blahblah
+1

「然後將它添加回我的本地服務器」 - 嗯?不知道你的意思。請重新說明。 –

+0

@ KarolyHorvath加了一點點解釋 –

+0

對不起,不明白那個。 –

回答

0

檢查的$redirect值。

如果這是一個相對的網址,你必須在協議+主機名+等等前綴到url,否則你最終會在你的本地服務器上。