Google Closure Compiler: проблема с программным доступом - PullRequest
1 голос
/ 10 января 2011

Я пытаюсь получить программный доступ Closure Compiler , но возникают проблемы как с PHP, так и с JavaScript. Вот быстрый и грязный PHP-скрипт, который я написал для того, чтобы поиграть с REST API компилятора:

<code><?php
if (!empty($_POST)) {
echo '<pre>';
print_r($_POST);
echo '

'; foreach ($ _POST as $ k => & $ v) $ v = urlencode ($ v); $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ ch, CURLOPT_POST, true); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ _POST); curl_setopt ($ ch, CURLOPT_URL, 'http://closure -compiler.appspot.com / compile'); echo curl_exec ($ ch); } еще { эхо "

Введите код JavaScript для оптимизации здесь:



"; }

Вывод, который я вижу:

Array
(
    [js_code] =>               function hello(name) {
                // Greets the user
                alert(\'Hello, \' + name);
              }
              hello(\'New user\');

    [compilation_level] => WHITESPACE_ONLY
    [output_format] => json
    [output_info] => compiled_code
    [warning_level] => VERBOSE
)

Error(13): No output information to produce, yet compilation was requested.

Я подумал, может быть, проблема с моими опциями cURL . Поэтому я попробовал JavaScript (через jQuery.post () call). Я " jQuerify " открыл случайное окно Firefox и запустил следующий код в консоли Firebug :

$.post('http://closure-compiler.appspot.com/compile',
  {
   'js_code': "function hello(name) {/*Greets the user*/alert('Hello, ' + name);}",
   'compilation_level': 'SIMPLE_OPTIMIZATIONS',
   'output_format': 'text',
   'output_info': 'compiled_code'
  },
  function(response) {
    alert(response);
  }
);

На этой панели отображается сообщение об ошибке 403.

Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 10 января 2011

Согласно API документов

The request must always have a Content-type header of application/x-www-form-urlencoded

не видел этого в вашем коде

Добавить

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/x-www-form-urlencoded'
));

до curl_exec()

1 голос
/ 10 января 2011

Ajax ( через jQuery или иначе ) не будет работать из-за политики одного и того же происхождения. ( Запросы ajax ограничены в одном и том же домене, если в результате не ожидается jsonp )

Просто используя ваш пример для размещения информации, она работает, как видно из http://www.jsfiddle.net/RySLr/

Так что, должно быть, это то, что упоминает @German Rumm ..

...