Спасибо Тони Саффолку за проверку, примеры importlib ... Я создал этот крошечный модуль, и вы все можете его использовать, если он вам поможет. Отдай, даааа!
import timeit
import os
import inspect, importlib as implib
import textwrap as twrap
def src_modules(filename):
assert (len(filename)>1)
mod = implib.import_module(filename.split(".")[0])
ml_alias = []
ml_actual = []
ml_together = []
ml_final = []
for i in inspect.getmembers(mod, inspect.ismodule):
ml_alias.append(i[0])
ml_actual.append((str(i[1]).split(" ")[1]))
ml_together = zip(ml_actual, ml_alias)
for t in ml_together:
(a,b) = t
ml_final.append(a+":="+b)
return ml_final
def l_to_str(itr):
assert(len(itr)>0)
itr.sort()
r_str = ""
for i in itr:
r_str += i+" "
return r_str
def src_info(filename, start_time=timeit.default_timer()):
assert (len(filename)>1)
filename_in = filename
filename = filename_in.split(".")[0]
if __name__ == filename:
output_module = filename
else:
output_module = __name__
print ("\n" + (80 * "#"))
print (" runtime ~= {0} ms".format(round(((timeit.default_timer() - start_time)*1000),3)))
print (" source file --> '{0}'".format(filename_in))
print (" output via --> '{0}'".format(output_module))
print (" modules used in '{0}':".format(filename))
print (" "+"\n ".join(twrap.wrap(l_to_str(src_modules(filename)), 75)))
print (80 * "#")
return ""
if __name__ == "__main__":
src_info(os.path.basename(__file__))
## how to use in X file:
#
# import print_src_info
# import os
#
# < ... your code ... >
#
# if __name__ == "__main__":
# print_src_info.src_info(os.path.basename(__file__))
## example output:
#
# ################################################################################
# runtime ~= 0.049 ms
# source file --> 'print_src_info.py'
# output via --> '__main__'
# modules used in 'print_src_info':
# 'importlib':=implib 'inspect':=inspect 'os':=os 'textwrap':=twrap
# 'timeit':=timeit
# ################################################################################
@Flax: да, я не могу больше согласиться с флеш-безопасностью с заголовками HTTP. Но есть еще один способ сделать это, но для этого потребуется немного поработать. Попробуйте использовать Socket вместо URLLoader, потому что Socket не имеет таких ограничений. Итак, для HTTP-запроса откройте сокет для порта 80 сервера ( http://yoursite.com/ ). Как только он будет подключен к серверу, отправьте все заголовки HTTP-запроса. Затем в SocketDataEvent проанализируйте данные и прочтите (или удалите) заголовки ответа и продолжите работу с данными.
Я удивлен, что вы даже смогли заставить его работать с запросом POST
. В декабре 2007 года Flash Player был обновлен, чтобы явно запретить Заголовок авторизации
. Я предполагаю, что с тех пор они снова разрешили это. Но я был бы удивлен этим. Редактировать : согласно комментарию @ derFunk, оказалось, что на самом деле заголовок был впоследствии повторно разрешен, хотя при его отправке в другой домен он должен быть явно разрешен в crossdomain.xml
.
Помимо конкретных проблем с заголовком Authorization
, я почти уверен, что Flash Player будет отправлять только пользовательские заголовки запросов с запросом POST
. Извините, у меня нет ссылки на это, но в моей компании мы широко используем Flash Player для работы с веб-сервисами Restful, и нам пришлось реализовать всевозможные обходные пути, чтобы все работало.
В итоге, Flash Player имеет ужасную поддержку для HTTP. Фактически, наш набор обходных путей активируется путем отправки заголовка запроса X-Crippled-Client: true
, который сообщает нашим службам интерпретировать запросы и отправлять ответы искаженными способами. Это настоящая боль в заднице.
Извините, я ничем не могу помочь ... удачи!
который сообщает нашим службам, что нужно интерпретировать запросы и отправлять ответы искаженными способами. Это настоящая боль в заднице.Извините, я ничем не могу помочь ... удачи!
который сообщает нашим службам, что нужно интерпретировать запросы и отправлять ответы искаженными способами. Это настоящая боль в заднице.Извините, я ничем не могу помочь ... удачи!