응답 헤더를 보내기 위해 SimpleHTTPServer 가져 오기

요한 바우어

이 클래스를 사용하여 Python에서 HTTP 서버를 실행하고 있습니다.

class Server:

    def __init__(self):
        port = 81
        httpd = SocketServer.ThreadingTCPServer(('', port), self.Proxy)
        httpd.serve_forever()

    class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):

        def do_GET(self):
            # just for demonstration:
            url = "http://ovh.net/files/10Mio.dat"
            opener = urllib2.build_opener()
            handle = opener.open(url)
            if hasattr(handle.info(), "headers"):
                headers = handle.info().headers
                for h in headers:
                    self.send_header(h[0], h[1])
            self.end_headers()
            self.copyfile(handle, self.wfile)

그러나 불행히도 예상대로 작동하지 않습니다. 서버에 요청을 보내면 예상보다 약간 큰 파일을 받게됩니다. 살펴보면 응답 헤더가 해당 파일의 시작 부분에 저장되어 있음을 알 수 있습니다. 응답 자체에는 헤더가 포함되어 있지 않으므로 SimpleHTTPServer가 do_GET ()을 호출하기 전에 헤더를 종료했다고 생각합니다.

이 답변을 보았고 그에 따라 코드를 편집했습니다.

class Server:

    def __init__(self):
        port = 81
        httpd = SocketServer.ThreadingTCPServer(('', port), self.Proxy)
        httpd.serve_forever()



    class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):

        def do_GET(self):
            # get handle again
            self.copyfile(handle, self.wfile)

        def end_headers(self):
            self.send_my_headers()
            SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)

        def send_my_headers(self):
            # Do something smart to get a file-like variable named handle
            self.send_header("Access-Control-Allow-Origin", "*")
            if hasattr(handle.info(), "headers"):
                headers = handle.info().headers
                for h in headers:
                    self.send_header(h[0], h[1])

그러나 그것은 어떤 차이도 만들지 않습니다. 응답 헤더는 여전히 파일에 채워져 있습니다. 여기서 무슨 일이 일어나고 있습니까?

편집 : 내가 의미하는 바를 명확히하기 위해 첫 번째 예제를 업데이트했습니다. 내가 원하는 것은 HTTP 프록시와 비슷합니다. 내 서버는 다른 서버에서 파일을 다운로드하고 데이터를 클라이언트로 다시 보내야합니다. 어떤 이유로 (설명하기에는 너무 많을 것입니다) 일반 프록시를 사용할 수 없습니다.

이제 첫 번째 코드 예제는이를 매우 효율적으로 수행합니다. 내 문제는 모든 헤더가 프로세스에서 손실된다는 것입니다. 즉, 클라이언트가 다운로드 크기 (무한 진행률 표시 줄 표시) 또는 파일 이름 (Content-disposition)을 인식하지 못합니다.

두 번째 코드 예제에서는 업스트림 서버에서받은 헤더를 보내려고했지만 do_GET이 호출되기 전에 헤더가 완료된 것 같습니다.

요한 바우어

좋아, Wireshark를 사용하여 실제로 무엇이 잘못되었는지 발견했습니다.

나는하는 것을 잊었다

self.send_response(200)

헤더를 보내기 전에 다음과 같은 줄을 보냅니다.

HTTP/1.1 200 OK

이 줄이 없으면 HTTP 클라이언트가 서버가 HTTP / 0.9를 사용하고 있다고 믿고 실제로 헤더가 잘못되었다고 생각합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PHP 응답 헤더 가져 오기

분류에서Dev

HTTP 응답에서 헤더 가져 오기

분류에서Dev

Firefox Addon에서 HTTP 응답 헤더 가져 오기

분류에서Dev

응답 헤더 로봇 프레임 워크 가져 오기

분류에서Dev

AFNetworking Swift의 헤더 응답에서 토큰 값 가져 오기

분류에서Dev

Access-control-allow-origin 헤더를 추가하기 위해 Squarespace 가져 오기

분류에서Dev

단위 테스트를 위해 가져 오기에서 응답 본문을 모의하려고합니다.

분류에서Dev

JSON 응답에서 노드를 가져 오기 위해 노력하고 자바 오류

분류에서Dev

Javascript 또는 GAS에서 특정 데이터를 가져 오기 위해 JSON 응답을 루프하는 방법

분류에서Dev

오류 응답을 반환하기 위해 MockBackend를 가져올 수 없습니다.

분류에서Dev

Angular Library에서 하위 폴더 내보내기 / 가져 오기

분류에서Dev

각도로 get 요청에 대한 응답 헤더 가져 오기

분류에서Dev

Tornado 요청 핸들러에 설정된 현재 응답 헤더 가져 오기

분류에서Dev

ServiceReference 호출의 응답에서 헤더 값 (Set-Cookie) 가져 오기

분류에서Dev

cURL에서 헤더없이 json 응답에서 값 가져 오기

분류에서Dev

UIView의 UITapGestureRecognizer와 하위보기를 탭하면 해당 하위보기가 함께 응답 함

분류에서Dev

Access-Control-Expose-Headers로도 응답 헤더 가져 오기 요청을 가져올 수 없습니다.

분류에서Dev

XML 응답에서 더 많은 항목 가져 오기

분류에서Dev

json 응답을 얻기 위해 헤더의 restful API에 json 데이터를 게시하는 방법 android

분류에서Dev

요청에 응답 한 실제 서버를 식별하기위한 HTTP 응답 헤더

분류에서Dev

Django Restframework를 사용하여 JSON 및 XML 응답 가져 오기

분류에서Dev

AJAX를 사용하여 PHP 응답 만 가져 오기

분류에서Dev

mitmproxy를 통해 가로 챈 요청에서 가짜 응답 (헤더 및 본문)을 다시 보내는 방법

분류에서Dev

Pandas DataFrame에 필요한 데이터를 가져 오기 위해 Python에서이 json 응답을 올바르게 풀려면 어떻게해야합니까?

분류에서Dev

응답에서 속성 가져 오기

분류에서Dev

응답 데이터 가져 오기

분류에서Dev

Rails : http 응답 값 가져 오기

분류에서Dev

Ajax 응답에서 imagepng 가져 오기

분류에서Dev

XML 응답에서 값 가져 오기

Related 관련 기사

  1. 1

    PHP 응답 헤더 가져 오기

  2. 2

    HTTP 응답에서 헤더 가져 오기

  3. 3

    Firefox Addon에서 HTTP 응답 헤더 가져 오기

  4. 4

    응답 헤더 로봇 프레임 워크 가져 오기

  5. 5

    AFNetworking Swift의 헤더 응답에서 토큰 값 가져 오기

  6. 6

    Access-control-allow-origin 헤더를 추가하기 위해 Squarespace 가져 오기

  7. 7

    단위 테스트를 위해 가져 오기에서 응답 본문을 모의하려고합니다.

  8. 8

    JSON 응답에서 노드를 가져 오기 위해 노력하고 자바 오류

  9. 9

    Javascript 또는 GAS에서 특정 데이터를 가져 오기 위해 JSON 응답을 루프하는 방법

  10. 10

    오류 응답을 반환하기 위해 MockBackend를 가져올 수 없습니다.

  11. 11

    Angular Library에서 하위 폴더 내보내기 / 가져 오기

  12. 12

    각도로 get 요청에 대한 응답 헤더 가져 오기

  13. 13

    Tornado 요청 핸들러에 설정된 현재 응답 헤더 가져 오기

  14. 14

    ServiceReference 호출의 응답에서 헤더 값 (Set-Cookie) 가져 오기

  15. 15

    cURL에서 헤더없이 json 응답에서 값 가져 오기

  16. 16

    UIView의 UITapGestureRecognizer와 하위보기를 탭하면 해당 하위보기가 함께 응답 함

  17. 17

    Access-Control-Expose-Headers로도 응답 헤더 가져 오기 요청을 가져올 수 없습니다.

  18. 18

    XML 응답에서 더 많은 항목 가져 오기

  19. 19

    json 응답을 얻기 위해 헤더의 restful API에 json 데이터를 게시하는 방법 android

  20. 20

    요청에 응답 한 실제 서버를 식별하기위한 HTTP 응답 헤더

  21. 21

    Django Restframework를 사용하여 JSON 및 XML 응답 가져 오기

  22. 22

    AJAX를 사용하여 PHP 응답 만 가져 오기

  23. 23

    mitmproxy를 통해 가로 챈 요청에서 가짜 응답 (헤더 및 본문)을 다시 보내는 방법

  24. 24

    Pandas DataFrame에 필요한 데이터를 가져 오기 위해 Python에서이 json 응답을 올바르게 풀려면 어떻게해야합니까?

  25. 25

    응답에서 속성 가져 오기

  26. 26

    응답 데이터 가져 오기

  27. 27

    Rails : http 응답 값 가져 오기

  28. 28

    Ajax 응답에서 imagepng 가져 오기

  29. 29

    XML 응답에서 값 가져 오기

뜨겁다태그

보관