2013-08-12 3 views
0

Я пытаюсь использовать urlfetch, чтобы сделать запрос к моему приложению (то же приложение, которое отправляет запрос), однако оно не работает.Appengine проблема с urlfetch (Python)

Мой код выглядит следующим образом;

uploadurl = 'http://myapp.appspot.com/posturl' 

result = urlfetch.fetch(
      url=uploadurl, 
      payload=data, 
      method=urlfetch.POST, 
      headers={'Content-Type': 'application/x-www-form-urlencoded'}) 

Нет ошибки, когда я это называю, и все, кажется, работает правильно, однако запрос никогда не приходит. Для целей отладки я изменил uploadurl на другое приложение, которое у меня есть, и он работал нормально. Любые идеи, почему я не могу отправлять запросы с использованием urlfetch в одно и то же приложение?

Полное (реальное) URL, который я назвал бы сделано

session = str(os.urandom(16).encode('hex')) 
uploadurl = blobstore.create_upload_url('/process?session=' + session) 

Так что я не могу понять, как это могло быть неправильно, как URL сделано для меня.

Спасибо.

+0

Вы попробовали свой настоящий uploadurl с urllib, чтобы узнать, правильно это? и что ваша полезная нагрузка действительно сделана из данных действительной формы? плюс, urlfetch исчерпывает ваши квоты, помните, что в виду –

+0

Я попробовал это с urllib, и он сделал то же самое. Я посмотрел на realurl, который он пытается установить POST, и это прекрасно. Данные не были действительными formdata, это был фактически образ, поэтому я изменил его на «image/jpeg», а не на «application/x-www-form-urlencoded», который не имел никакого значения. – Joseph

+0

журналы в appengine? есть ли у вас более подходящий код, который вы можете отправить? Кроме того, добавьте параметр крайнего срока для вашего вызова извлечения (например, 'deadline = 60', поскольку он измеряется в секундах, а 60 - максимально допустимое для вашего приложения) и посмотрите, работает ли он (по умолчанию в противном случае 5 секунд) –

ответ

1

Я не знаю, как вы проверяете, что запрос «никогда не приходит». URL-адреса blobstore не обрабатываются фактическим кодом вашего приложения, а самим временем выполнения App Engine, поэтому, если вы смотрите в журналах, вы не увидите этот запрос.

+0

Я думал, что один раз загрузка была завершена, в этом случае был запрошен другой URL-адрес «/ process? session = '+ session». Кроме того, я отправляю изображение, и оно не сохраняется в blobstore. – Joseph

0

Я думаю, что это невозможно, чтобы предотвратить бесконечную петлю. Из апи документации UrlFetch page:

Чтобы предотвратить приложение от вызывая бесконечную рекурсию запросов, обработчик запроса не могут принести свой собственный URL. По-прежнему можно вызвать бесконечную рекурсию другими способами, поэтому учтите, что ваше приложение может быть сделано для получения запросов на URL-адреса, предоставленные пользователем .

Смежные вопросы