2016-11-26 11 views
0

현재 현재 꼬인 서버 코드입니다. URL로 인코딩 된 요청을 가져와 JSON 같은 문자열로 변환 한 다음 반환하는 간단한 실험입니다. 나는 간단한 텍스트를 수신하고 때 글꼴에주의를 지불 한예상치 못한 글꼴로 된 텍스트를 반환하는 뒤틀린 서버

from twisted.web.server import Site 
from twisted.web.resource import Resource 
from twisted.internet import reactor 
import urllib.parse 

class FormPage(Resource): 
    isLeaf = True 
    def render_GET(self, request): 
     print(request.uri) 
     x = (request.uri).decode('ascii') 
     x = x[1:] 
     x = todi(x) 
     return x.encode('ascii') 
def todi(st): 
    if len(st) == 0: 
     return '{}' 
    if st[len(st)-1] == '/': 
     st = st[:-1] 
    if len(st) == 0: 
     return '()' 
    if st[0] == '?': 
     st = st[1:] 
    st = urllib.parse.parse_qsl(st) 
    return str(dict(st)) 



factory = Site(FormPage()) 
reactor.listenTCP(80, factory) 
reactor.run() 

내 브라우저가 표시됩니다. 예를 들어,이 사이트의 경우 : http://icanhazip.com/을 방문하면 글꼴은 consola 글꼴 (MS 메모장의 기본 글꼴)과 비슷합니다. 그러나 내 사이트를 방문하면 브라우저에 Times New Roman과 같은 글꼴이 표시됩니다.

사이트에서 간단한 문자열을 반환하는 등의 디버깅을 한 적이 있습니다. 그러나 추한 글꼴을 제공하는 데있어 삐뚤어진 부분이 없어 질 수 있습니다.

여기에 example이 있습니다.

또한 Chrome에서 마우스 오른쪽 버튼을 클릭하고 '페이지 소스보기'버튼을 사용한다는 점을 유의하십시오. 저를 믿으십시오, 나의 두보기는 저것에 따르면 단순히 원본이다.

+0

꼬인 서버가 http://icanhazip.com/과 똑같은 IP 주소 문자열을 반환하면 어떻게됩니까? 이것들은 동일하게 렌더링되어야하며 Twisted와 전혀 관련이 없습니다. – mhawke

+0

어떻게 든 그들은 똑같이 보지 않습니다. – Luke

+0

그래서 같은 문자열을 정확히 시도 했습니까? 'render()'함수를 다음과 같이 만드십시오 :'def render_GET (self, request) :'123.123.123.123 '을 반환하십시오 (123.123.123.123을 http://icanhazip.com에 의해 표시된 동일한 IP 주소로 대체하십시오) – mhawke

답변

1

Twisted 서버가 반환 한 헤더를보고 다른 웹 사이트가 반환 한 헤더와 비교할 때 후자는 Content-Type: text/plain; charset=UTF-8을 지정하지만 Twisted 서버는 Content-Type을 지정하지 않습니다.

콘텐츠 형식이 지정되지 않은 콘텐츠 형식 인 text/plain으로 지정되면 브라우저가 Firefox와 동일하게 나타납니다. 다른 글꼴을 사용합니다.

트위스트에서는이 같은 request.setHeader()으로 Content-Type 헤더를 설정할 수 있습니다

def render_GET(self, request): 
    print(request.uri) 
    x = (request.uri).decode('ascii') 
    x = x[1:] 
    x = todi(x) 
    request.setHeader('Content-Type', 'text/plain; charset=UTF-8') 
    return x.encode('UTF-8') 

을이이 Content-Type을 설정으로 그것뿐만 아니라 너무 캐릭터 세트를 지정할 수 있습니다. UTF-8이 (아마도) 선호되며 응답 텍스트도 비슷하게 인코딩됩니다.