Найти - Пользователи
Полная версия: Почему так отображается строка?
Начало » Python для новичков » Почему так отображается строка?
1
evgenyivanov
Взял из сети пример простейшег Http-сервера. Работает. возвращает html страницу, как в примере. Решил добавить ссылку на картинку:

<img src=u'c:\ftp_server\1.jpg'>

Сервер вернул html

<img src=u'c:tp_server.jpg'>

Куда он съел символы? Есть ли примеры, как правильно вернуть картинку?

Заранее спасибо!
FishHook
Без кода программы понять это невозможно
evgenyivanov
#! /usr/local/bin/python
import BaseHTTPServer
import cgi
import string
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def showPage(self,method,get_data,post_data):
        self.wfile.write("HTTP/1.1 200 OK\n");
        self.wfile.write("Content-Type: text/html\n")
        self.wfile.write("\n");        
        responce = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple HTTP Server</title>
<meta name="description" content="Simple HTTP Server" />
</head>
<body style="background:white;">				
Method $method<br />
Path: $path<br />
get data $get_data<br />
post data $post_data<br />
<img src=u'c:\ftp_server\1.jpg'>
<form action="" method="post">
<input type="text" name="value1">
<input type="submit" name="value2">
</form>
</body>
</html>
        """
        s = string.Template(responce)
        responce = s.substitute(dict(
            get_data=get_data,
            post_data=post_data,
            path=self.path,
            method=method
            )) 
        self.wfile.write(responce);
                
    def do_GET(self):
        get_data = cgi.parse_qs(self.path[2:])
        self.showPage('GET',get_data,{})
        
    def do_POST(self):
        get_data = cgi.parse_qs(self.path[2:])
        cl, cl2 = cgi.parse_header(self.headers.get('content-length'))
        qs = self.rfile.read(int(cl))
        post_data = cgi.parse_qs(qs.decode())
        self.showPage('GET',get_data,post_data)
class ChatServer(BaseHTTPServer.HTTPServer):
    def __init__(self,address,handler):
        BaseHTTPServer.HTTPServer.__init__(self,address,handler)
        
def main():
    try:
        server = ChatServer(("127.0.0.1", 5000), RequestHandler)
        server.serve_forever()
        print 'Run Http Server 127.0.0.1:5000'
    except KeyboardInterrupt:
        print('^C received, shutting down server')
        server.socket.close();
if __name__ == '__main__':
    main()

Прогу взял в интернете, добавил только одну строку
FishHook
Во-первых убери u <img src=u'c:\ftp_server\1.jpg'>
А вообще, кажется, что этот сервер статику раздавать не умеет.
JOHN_16
responce в данном случае обычная строка, поэтому в фрагменте
u'c:\ftp_server\1.jpg'
слешы воспринимаются как управляющие символы, такие же как \n, \r . Используйте \\
И разумеется u убрать по той же самой причине - response это обычная строка.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB