2010-11-29 58 views
1

我有一個頁面,旨在接收來自另一臺服務器的捲曲請求。php curl跟着重定向?

我需要將此捲曲請求格式化爲其他格式。

所以我有這樣的代碼

<?php 
$id =  (isset($_GET['msgid']) ? $_GET['msgid'] : 'null'); 
$from = (isset($_GET['from'])  ? $_GET['from'] : 'null'); 
$body = (isset($_GET['content']) ? $_GET['content'] : 'null'); 
$status = (isset($_GET['status']) ? $_GET['status'] : 'null'); 

header("location: ../action/receive_message/$id/$from/$body/$status"); 
?> 

所以,如果有人在發動捲曲請求
http://example.com/intercept/test.php?id=123&from=me&body=something;

請問那叫
http://example.com/action/123/me/something/null

或者如果沒有,我可以得到它的方式嗎?

另一個是。

有沒有一種方法可以在.htaccess中做到這一點? 所以我不必爲此創建一個單獨的文件?

回答

1

Curl默認不遵循重定向。

如果您從命令行運行curl,則需要將-L標誌添加到您的命令以使其跟隨重定向。

如果您通過庫調用curl,則需要將FOLLOWLOCATION curl選項設置爲true(或1),確切的代碼將取決於您使用的語言/庫/包裝器。

0

首先,我認爲你的代碼有一些問題,因爲你將這些變量設置爲isset()的結果,這是真或假。此外,如果您稍後將該字符串包含在內,則爲該字符串設置空值是一個糟糕的計劃,如果您希望空字出現,請使用'null',如果沒有,則使用空字符串。

這應該是:

$id =  (isset($_GET['msgid']) ? $_GET['msgid'] : ''); 
$from = (isset($_GET['from'])  ? $_GET['from'] : ''); 
$body = (isset($_GET['content']) ? $_GET['content'] : ''); 
$status = (isset($_GET['status']) ? $_GET['status'] : ''); 

Location頭會告訴捲曲重定向,而如果考慮到-L選項調用時捲曲會做。請注意,Location不支持相對網址,您需要指定我相信的完整網址。

是的,你可以做到這一點,提供的查詢字符串的文件/intercept/.htaccess使用mod_rewrite是按照正確的順序,所有值都存在,也可以使用隨機順序或丟失的條目,但更復雜的處理。

RewriteEngine on 
RewriteBase /intercept/ 

# Note, & may need escaping, can not recall 
RewriteCond %{QUERY_STRING} ^id=([^&]+)&from=([^&]+)&content=([^&]+)&status=([^&]+)$ 
RewriteRule test.php /action/%1/%2/%3/%4 [L] 

如果同一網站上,你可以使用[L]否則指定完整的網址,並使用[R]代替。

+0

是的,你是正確的,現在會改變。 – Hailwood 2010-11-29 01:02:44