Могу ли я запустить HTTP GET непосредственно в SQL под MySQL? - PullRequest
1 голос
/ 15 ноября 2008

Я хотел бы сделать это:

UPDATE table SET blobCol = HTTPGET(urlCol) WHERE whatever LIMIT n;

Есть ли код для этого? Я знал, что это возможно, так как MySQL Docs содержит пример добавления функции, которая выполняет поиск DNS.

MySQL / windows / Желательно без компиляции, но я могу.

(Если вы не слышали ничего подобного, но ожидали бы, что так и будет, если бы оно существовало, было бы неплохо "proly not".)

РЕДАКТИРОВАТЬ: Я знал, что это откроет всю безопасность can-o-worms, однако в моих случаях единственный доступ к БД осуществляется через консольное приложение mysql. Это не всемирно доступная система. Это не веб-серверная часть. Это только локальная система регистрации данных

Ответы [ 4 ]

5 голосов
/ 15 ноября 2008

Нет, слава богу, это был бы ужас безопасности. Каждая дыра SQL-инъекции в приложении может быть использована для запуска спам-соединений для атаки на другие сайты.

Полагаю, вы могли бы написать это на C и скомпилировать как UDF. Но я не думаю, что это действительно дает вам что-либо по сравнению с простым ВЫБОРОМ на уровне вашего приложения и циклической обработкой результатов с помощью HTTP GET и UPDATEing. Если мы говорим о создании HTTP-соединений, дополнительная эффективность выполнения этого на уровне базы данных в любом случае будет полностью уменьшена сетевыми задержками.

2 голосов
/ 15 ноября 2008

Я не знаю ни одной подобной функции как части MySQL. Вы просто пытаетесь получить данные HTML со многих URL-адресов?

Альтернативным решением может быть использование функции importHtml электронной таблицы Google.

Таблицы Google позволяют импортировать онлайн данные

1 голос
/ 15 ноября 2008

Пролы нет. Передовой практикой в ​​веб-среде является изоляция серверов баз данных извне, что означает, что db-серверу не разрешат получать данные из Интернета.

0 голосов
/ 16 ноября 2008

Пролы нет.

Если вы абсолютно уверены, что можете получить веб-контент из среды SQL, насколько я знаю, есть две возможности:

  1. Напишите пользовательский UDF MySQL на C (как упоминалось в bobince). Потенциально это может быть огромной работой, в зависимости от вашего опыта работы с C, какой степени безопасности вы хотите, насколько полной вы хотите, чтобы UDF был: например. Просто получать запросы? Как насчет POST? ГОЛОВА? и т.д.

  2. Используйте другую базу данных, которую может сделать это. Если вы довольны SQL, вы можете сделать это с PostgreSQL и одним из языков оснастки, таким как Python или PHP.

Если вы не слишком беспокоитесь о том, чтобы придерживаться SQL, вы можете использовать что-то вроде eXist . Вы можете сделать этот тип вещей относительно легко с помощью XQuery, и было бы полезно иметь возможность легко изменять результаты в соответствии с вашей схемой (а не просто помещать их в поле большого двоичного объекта) или сохранять страницу «как есть» в виде документа xhtml. в БД.

Затем вы можете очень быстро выполнять запросы ко всем документам, например, чтобы получить все ссылки или цитаты или что-то еще. Вы могли бы даже применить XSL к такому результату с очень небольшим количеством дополнительной работы. Отлично, если вы храните страницы для справки и хотите адаптировать результаты в персональное приложение в стиле "интранет".

Кроме того, поскольку eXist ориентирован на документы, он имеет множество отличных методов поиска нечеткого текста, поиска почти слов и имеет большой полнотекстовый индекс (намного лучше, чем у MySQL). Идеально, если вы после некоторого интеллектуального анализа содержимого, например: найдите мне все документы, где слово типа " burger ", в пределах 50 слов слова "hotdog", где слово отсутствует в UL список. Попробуйте сделать это нативное в MySQL!

В стороне, и без злого умысла; Я часто задаюсь вопросом, почему eXist игнорируется, когда люди создают CMS. Это база данных, которая может хранить содержимое в собственном формате (XML или его подмножество (x) HTML), легко запрашивать его в собственном формате и может переводить его из родной формат с мощным языком шаблонов, который выглядит и действует как его собственный формат . Иногда SQL просто не подходит для этой работы!

Извините. Не хотел вафли! : - $

...