Как я могу запросить API таблиц Google со строковым значением?

Я использую Zend_Gdata_SpreadsheetsListQuery. В PHP мой запрос:

"confirmation=$confirmation"

Проблема в том, что $confirmation = 'AB-CD-EFG-012345'; По-видимому, дефисы вызывают проблемы с запросом, и выдается следующее исключение:

Неперехваченное исключение «Zend_Gdata_App_HttpException» с сообщением «Ожидаемый код ответа 200, получено 400 Ошибка синтаксического анализа: обнаружен недопустимый токен»

Как я могу указать или экранировать значение, чтобы не вызывать ошибок синтаксического анализа? Одинарные кавычки вызывают ту же ошибку.

Изменить: когда я тестировал двойные кавычки, произошла ошибка пользователя. Двойные кавычки работают.


person ColinM    schedule 09.06.2010    source источник


Ответы (5)


Как оказалось, у меня было две электронные таблицы, одна для разработки и одна для производства, и я запрашивал не ту, которую я думал, что я был. Это решение работает:

"confirmation=\"$confirmation\""
person ColinM    schedule 10.06.2010

Стоит отметить, что вы должны быть осторожны с побегом. Я попробовал это и не получил никакой радости. Я пробовал много комбинаций в этом направлении:

$query->setSpreadsheetQuery("name=\"Andrew John\"");

но безрезультатно. Запуск трафика через HTTP-инспектор (и настройка вашего Zend HTTP-клиента для работы через прокси — еще одна вещь, на которую стоит обратить внимание!) Я мог видеть, что сгенерированные URL-адреса из этой работы выглядят следующим образом:

http://spreadsheets.google.com:80/feeds/list/spreadsheetkey/od6/private/full?sq=name%3D%5C%22Andrew+John%5C%22

Это приводило к ошибкам Invalid Token (Status 400). Ему не нравилась escape-последовательность %5C%22 (\"), но откуда она взялась?!

Оказывается, глубоко в коде Zends есть «parse_str», который добавлял косые черты к строке запроса, потому что по какой-то причине (конфигурация php по умолчанию в Ubuntu?) magic_quotes_gpc было установлено на On в файле php.ini.

Отключение этого параметра позволило сгенерированным URL-адресам вернуться к:

http://spreadsheets.google.com:80/feeds/list/spreadsheetkey/od6/private/full?sq=name%3D%22Andrew+John%22

и все стало работать.

Между прочим, мне пришлось запустить его через HTTP-инспектор, потому что:

echo $query->getQueryUrl();

неправильно сообщил, что отправляет указанную выше строку без %5C перед каждой кавычкой! Просто показывает, никогда не стоит доверять тому, что говорит вам ваш код...

Итак, если у вас есть проблемы со структурированными запросами в классах Gdata Zend Framework и простое добавление кавычек не решает их, быстро проверьте, не включен ли у вас magic_quotes_gpc!

person reefnet_alex    schedule 15.09.2010
comment
Я просмотрел несколько наших серверов Ubuntu, и похоже, что magic_quotes_gpc включен по умолчанию в версиях, которые мы используем. - person reefnet_alex; 16.09.2010

Я пытался исследовать библиотеку Zend для этого, но не получаю удовольствия.

Может ли это быть что-то столь же простое, как заключить значение в апострофы?

Ваш код:

"confirmation=$confirmation"

Возможный код для тестирования:

"confirmation='$confirmation'"

Просто случайное предложение...

person Luke Stevenson    schedule 09.06.2010

Вы можете использовать urlencode. Однако я ожидаю, что Zend API справится с этим за вас, поэтому убедитесь, что вы используете его правильно.

person Matthew Flaschen    schedule 09.06.2010
comment
Библиотека Zend уже делает urlencode, поэтому если я сделаю это самостоятельно, это приведет к двойному кодированию. - person ColinM; 10.06.2010

мое решение:

получить строки, которые точно не соответствуют запросу - по столбцу, в котором, похоже, нет запрещенных букв/знаков. и в php-скрипте сделать фильтрацию строк.

person Michal - wereda-net    schedule 19.11.2013