php curl следовать за редиректами? - PullRequest
1 голос
/ 29 ноября 2010

У меня есть страница, предназначенная для получения запроса скручивания с другого сервера.

Мне нужно отформатировать этот запрос скручивания в другой формат.

, поэтому у меня есть этот код

<?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?Так что мне не нужно создавать отдельный файл для этого?

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Curl не следует перенаправлениям по умолчанию.

Если вы запускаете curl из командной строки, вам нужно добавить флаг -L в вашу команду, чтобы он следовал за перенаправлениями.

Если вы вызываете curl через библиотеку, вам нужно установить для параметра FOLLOWLOCATION curl значение true (или 1), и точный код, который нужно сделать, будет зависеть от используемого вами языка / библиотеки / оболочки .

0 голосов
/ 29 ноября 2010

Во-первых, я думаю, что у вашего кода есть некоторые проблемы, поскольку вы устанавливаете эти переменные в результат isset(), который является истинным или ложным. Кроме того, установка пустого значения для строки, когда вы включаете ее позже, является плохим планом, если вы хотите, чтобы слово null появлялось, используйте '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 сообщит curl, что нужно перенаправить, что будет делать curl, если при вызове указана опция -L. Обратите внимание, что Location не поддерживает относительные URL, вам нужно указать полный URL, который я считаю.

Да, вы можете сделать это, используя mod_rewrite в файле /intercept/.htaccess, если строка запроса находится в правильном порядке и присутствуют все значения, возможно обрабатывать в произвольном порядке или пропуская записи, но более сложный.

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], в противном случае укажите полный URL-адрес и вместо него используйте [R].

...