Можно ли автоматизировать обратную передачу со стороны клиента? - PullRequest
1 голос
/ 19 июня 2009

Один из моих клиентов должен периодически получать данные клиентов из веб-службы. Сами данные предоставляются в виде CSV-файлов через постбэки javascript, как и большая часть навигации по сайту сервиса.

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

Можно ли автоматизировать процесс загрузки файлов с помощью обратной передачи? (Скажем, например, через скрипт оболочки, который можно запустить через cron?)

Если это так, что бы вы посоветовали в качестве наиболее подходящего инструмента для этого?

Ответы [ 2 ]

4 голосов
/ 21 июля 2009

В случае, если кто-то снова сталкивается с этим вопросом, я нашел решение:

Хитрость заключается в том, чтобы использовать Механизировать и серию вызовов Browser.submit() на соответствующих страницах.

Единственное зависание, с которым могут столкнуться и другие, - это то, что страницам ASP.NET (по моему опыту, крупнейшему источнику навигации на основе обратной передачи) также необходим скрытый параметр под названием __EVENTTARGET в форме, который не будет существовать, когда Вы используете механизировать.

Функция __doPostBack('foo') на этих страницах присваивает релевантное значение __EVENTTARGET через событие javascript onclick для каждой из ссылок, но, поскольку механизация не использует javascript, вам необходимо установить эти значения самостоятельно.

Я создал небольшую утилиту для использования в моих скриптах, которая делает это:

def add_event_target(form, target):
    #Creates a new __EVENTTARGET control and adds the value specified
    #.NET doesn't generate this in mechanize for some reason -- suspect maybe is 
    #normally generated by javascript or some useragent thing?
    form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
    form.set_all_readonly(False)
    form["__EVENTTARGET"] = target

Надеюсь, это полезно для тех, кто, возможно, столкнется с этим вопросом позже.

0 голосов
/ 19 июня 2009

Вы можете использовать таймер AJAX. Проверьте на сайте asp.net / ajax .

...