aboutsummaryrefslogtreecommitdiff
path: root/scripts/http-client.py
blob: 4e1505f33bb880e2bdca3a8fc2e2861fe6e179c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# $Id$

import httplib, tlslite.api

certChain = []
for file in ("biz-certs/Dave-EE.cer", "biz-certs/Dave-CA.cer"):
  f = open(file, "r")
  x509 = tlslite.api.X509()
  x509.parse(f.read())
  f.close()
  certChain.append(x509)
certChain = tlslite.api.X509CertChain(certChain)

f = open("biz-certs/Dave-EE.key", "r")
privateKey = tlslite.api.parsePEMKey(f.read(), private=True)
f.close()

# There doesn't seem to be any existing OpenSSL-based python HTTPS
# client which bothers to check the server's certificate.  tlslite
# does check, but only when it's using cryptlib...which doesn't
# compile on FreeBSD this week due to a completely unrelated symbol
# collision with another FreeBSD package (don't ask).
#
# The mechanism that requires cryptlib is the x509TrustList parameter to
# tlslite.api.HTTPTLSConnection(), which looks just about perfect other
# than requiring cryptlib.   Not sure how much work it would be to get
# this to work with M2Crypto (would help if M2Crypto were documented).
#
# For the moment, just punt on the issue, as this is test code.  In
# production this would be a problem.

http = tlslite.api.HTTPTLSConnection(host="localhost", port=8080, certChain=certChain, privateKey=privateKey)

https.connect()
https.request("POST", "/", "This is a test.  This is only a test.  Had this been real you would now be really confused.\n", {"Content-Type":"application/wombat"})
response = https.getresponse()

for h in response.getheaders():
  print "%s: %s" % h
print
if response.status == httplib.OK:
  print "OK"
else:
  print "Ouch"
print
print response.read()