JSONRPC 서버의 유효성을 검사하는 테스트를 작성 중이며 the requests module을 사용하여 유효하지 않은 Content-Length 및 Content-Type 헤더를 설정하는 등의 테스트를하고 싶습니다. 그러나 Google 서버에는 유효한 클라이언트 인증서가 필요하며 클라이언트 모듈 as documented in their turorial을 올바르게 사용하도록 요청 모듈을 가져옵니다.요청 모듈을 사용하여 클라이언트 인증서 오류를 진단하려면 어떻게합니까?
>>> import socket, ssl
>>> s = """\
... POST /jsonrpc HTTP/1.1
... Host: example.com
... Content-Length: 77
...
... {"params": [{"example": "parameter"}], "id": 1, "method": "example.function"}\
... """.replace("\n", "\r\n")
>>> sock = socket.create_connection(("example.com", 443))
>>> sock = ssl.wrap_socket(sock, keyfile = "key.pem", certfile = "cert.pem")
>>> sock.sendall(s)
144
>>> print(sock.recv(4096) + sock.recv(4096))
HTTP/1.1 200 OK
Date: Mon, 23 Jul 2012 19:50:17 GMT
Server: CherryPy/3.2.0
Content-Length: 53
Content-Type: application/json
Set-Cookie: session_id=4ee3f4c435aee126c8042d4fba99962a48ca0a37; expires=Mon, 23 Jul 2012 20:20:17 GMT; Path=/; secure
Connection: close
{"jsonrpc": "2.0", "id": 1, "result": "Hello World!"}
을하지만 같은 일을 요청 모듈을 사용할 때, 그것은 실패 : 나는 단순히 소켓을 열고 수동으로 데이터를 전송하는 경우
, 그냥 잘 작동
>>> import requests
>>> data = '{"params": [{"example": "parameter"}], "id": 1, "method": "example.function"}'
>>> r = requests.post("https://example.com/jsonrpc", data = data, headers = {"Content-Length": "77"}, timeout = 2, verify = False, cert = ("cert.pem", "key.pem"))
>>> print r.content
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /jsonrpc
on this server.</p>
<hr>
<address>Apache/2.2.15 (Red Hat) Server at example.com Port 443</address>
</body></html>
그래서 이것이 왜 실패했는지뿐만 아니라 무엇이 잘못되었는지를 알 수있는 방법조차 모릅니다. 로깅 방법을 바꾸기 위해 Apache 서버 설정을 변경할 권한을 얻으려고 시도 할 수 있습니다. 그러나 이것이 실패하는 이유를 알아내는 방법이 있습니까?