Создание веб-сервера с Flask, который выводит что-то доступное для запроса GET - PullRequest
1 голос
/ 01 апреля 2012

У меня есть скрипт Python, который выводит фрагмент текста в строку. Я пытаюсь сделать этот фрагмент текста доступным в Интернете, чтобы я мог перенести его на микроконтроллер Arduino. Другими словами, рабочий процесс выглядит следующим образом: Источник текста> Python> ??? > Arduino> Окончательный вывод.

Я использовал пример кода Flask от Heroku, чтобы начать экспериментировать с работой этой функциональности. Их код для Flask следующий:

 import os

 from flask import Flask
 app = Flask(__name__)

 @app.route('/')
 def hello():
    return 'Hello World!'

 if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Когда я пытаюсь выполнить HTTP-запрос на получение в моем приложении heroku, оно дает мне 404. Я подозреваю, что это потому, что этот скрипт ничего не выводит. Например, когда я использую это приложение для обработки с веб-сайта Processing.org для выполнения запроса GET:

import processing.net.*;

Client c;
String data;

void setup() {
   size(200, 200);
   background(50);
   fill(200);
   c = new Client(this, "http://freezing-stream-5123.herokuapp.com/", 80); // Connect to server on port 80
   c.write("GET / HTTP/1.1\n"); // Use the HTTP "GET" command to ask for a Web page
   c.write("Host: my_domain_name.com\n\n"); // Be polite and say who we are
   }

void draw() {
   if (c.available() > 0) { // If there's incoming data from the client...
   data = c.readString(); // ...then grab it and print it
   println(data);
  }
}

Что возвращается, так это:

HTTP/1.1 200 OK
Date: Sat, 31 Mar 2012 22:27:10 GMT
Server: Apache
Cache-control: no-cache, no-store
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Content-Length: 968
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-     equiv="refresh" content="0;url=http://earthlink-help.com/main?
InterceptSource=0&ClientLocation=us&ParticipantID=xj6e3468k634hy3945zg3zkhfn7zfgf6&FailureMode    =1&SearchQuery=&FailedURI=http%3A%2F%2Fmy_domain_name.com%2F&AddInType=4&Version=2.1.8-1.90base&Referer=&Implementation=0"/><script type="text/javascript">url="http://earthlink-help.com/main?InterceptSource=0&ClientLocation=us&ParticipantID=xj6e3468k634hy3945zg3zkhfn7zfgf6&FailureMode=1&SearchQuery=&FailedURI=http%3A%2F%2Fmy_domain_name.com%2F&AddInType=4&Version=2.1.8-1.90base&Referer=&Implementation=0";if(top.location!=location){var w=window,d=document,e=d.documentElement,b=d.body,x=w.innerWidth||e.clientWidth||b.clientWidth,y=w.innerHeight||e.clientHeight||b.clientHeight;url+="&w="+x+"&h="+y;}window.
location.replace(url);</script></head><body></body></html>

АКА: Там ничего нет. «Hello world» действительно появляется, когда я использую curl, чтобы вытащить веб-страницу, но я не знаю, означает ли это что-нибудь.

Итак, мой вопрос: может ли кто-нибудь указать мне на что-то, что приклеит мою строку к чему-то, из чего я могу ее извлечь? Я понимаю, что это, вероятно, глупый вопрос, но я полностью потерялся в море веб-серверов и т. Д. И был бы признателен за некоторые рекомендации.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

«Hello world» действительно появляется, когда я использую curl для перетягивания веб-страницы, но я не знаю, означает ли это что-нибудь.

Это, вероятно, означает, что он работает, и проблема, возможно, в коде обработки.

Не очень ясно, связана ли ваша проблема с запуском основного приложения Flask.

0 голосов
/ 01 апреля 2012

Похоже, частью проблемы является то, что вы не возвращаете объект ответа, посмотрите API документы.Существует объект Response, который вы можете заполнить только текстом, либо json, либо просто текстом.Если вы планируете использовать конечную точку URL, посмотрите на функцию jsonify из Flask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...