#php #apache-flex #twitter #proxy #get
#php #apache-flex #Twitter #прокси #получить
Вопрос:
Я придумал этот проект Twitter во flash, и как только я закончил и попытался запустить его в Интернете, я столкнулся с ошибкой изолированной среды. Из того, что я прочитал, похоже, что мне просто нужно настроить php прокси-файл. Который я получаю и понимаю. Все руководства, которые я смог найти, были для простых URL-адресов без передачи данных GET в URL. Для моего проекта данные GET являются динамическими, поэтому я не могу просто поместить установленный URL в прокси php, и я недостаточно хорошо понимаю php, чтобы выяснить, как получить данные get в URL прокси.. итак, вот что я знаю, как редактировать в Flex:
вот полный пример вызова api, который мне нужно было бы выполнить:
http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=brybamamp;?page=1
и вот скрипт php прокси, который был рекомендован онлайн:
<?php
$post_data = $HTTP_RAW_POST_DATA;
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);
$ch = curl_init( $_GET['url'] );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ( strlen($post_data)>0 ){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
$response_headers = curl_getinfo($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
header( 'Content-type: ' . $response_headers['content-type']);
print $response;
}
?>
Хорошо, итак, приступая к работе, мне просто нужно преобразовать php-скрипт в файл, что-то вроде twitter.php и просто разместите его в моем домене. Тогда я предполагаю, что в поле URL для настройки службы http в Flex поместите и повторно введите его как что-то вроде этого:
http://mydomain.com/twitter.php?screen_name=brybamamp;?page=1
Итак, что я спрашиваю, потому что мое понимание php очень ограничено, как именно я мог бы использовать приведенный выше скрипт и сделать его доступным для передачи
http://mydomain.com/twitter.php?screen_name=brybamamp;?page=1
с помощью Flex и быть в состоянии принимать различные потенциальные аргументы?
Я думаю, это может быть что-то вроде
$page = $_GET['page'];
$screen_name = $_GET['screen_name'];
в файле php, но я не уверен, куда мне следует поместить переменные, чтобы сделать их частью URL
я уверен, что это отличный вариант, если вы знаете php, и было бы здорово, если бы кто-нибудь мог мне с этим помочь, спасибо!
РЕДАКТИРОВАТЬ: я попробовал это, но получил ошибку (ошибка опубликована под тем, что я пробовал)
<?php
$page = $_GET['page'];
$screen_name = $_GET['screen_name'];
$url = $_GET['url'];
$post_data = $HTTP_RAW_POST_DATA;
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);
$ch = curl_init("'url'?screen_name='$screen_name'amp;?page='$page'");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ( strlen($post_data)>0 ){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
$response_headers = curl_getinfo($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
header( 'Content-type: ' . $response_headers['content-type']);
print $response;
}
?>
сообщение об ошибке:
The response is not a valid XML or a JSON string.
Error on line 1 of document : The element type "meta" must be terminated by the matching end-tag "". Nested exception: The element type "meta" must be terminated by the matching end-tag "".
Ответ №1:
<?php
$post_data = $HTTP_RAW_POST_DATA;
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);
$screen_name = $_GET['screen_name'];
$page = $_GET['page'];
$url = "http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=$screen_nameamp;page=$page";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ( strlen($post_data)>0 ){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
$response_headers = curl_getinfo($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
header( 'Content-type: ' . $response_headers['content-type']);
print $response;
}
?>
Хотя, если вы собираетесь вызывать больше, чем просто один вызов api, вы можете захотеть рассмотреть возможность создания строки запроса в AS и просто прикрепить всю строку к концу домена.
IE.
вы бы передали что-то вроде «1 / statuses /user_timeline.xml?screen_name=brybamamp;?page = 1» в один параметр.
И ваш php будет выглядеть следующим образом…
$query= $_GET['query'];
$url = "http://api.twitter.com/$query";
Или, что еще лучше, создайте свой собственный service API, который использует ваши собственные вызовы API, специфичные для вашего приложения. Таким образом, вам не нужно перестраивать SWF-файл, если и когда изменится API twitter.