scripts/send-error-report: simple hack to use proxy from the enviroment

People behind a proxy couldn't send an error report to an upstream server,
this should fix the issue if they use a proxy that doesn't require authentication,
or one that uses basic http authentication and it's correctly exported in the enviroment.

(From OE-Core rev: a8511ee80246b4e2caa353b87f4b586f1539e6d4)

Signed-off-by: Stefan Stanacar <stefanx.stanacar@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Stefan Stanacar 2014-04-11 20:49:14 +03:00 committed by Richard Purdie
parent 1cb95f7bdf
commit e2661d7367
1 changed files with 36 additions and 7 deletions

View File

@ -7,7 +7,39 @@
import httplib, urllib, os, sys, json
import httplib, urllib, os, sys, json, base64
from urllib2 import _parse_proxy as parseproxy
def handle_connection(server, data):
params = urllib.urlencode({'data': data})
headers = {"Content-type": "application/json"}
proxyrequired = False
if os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"):
proxyrequired = True
# we need to check that the server isn't a local one, as in no_proxy
try:
temp = httplib.HTTPConnection(server, strict=True, timeout=5)
temp.request("GET", "/")
tempres = temp.getresponse()
if tempres.status == 200:
proxyrequired = False
temp.close()
except:
pass
if proxyrequired:
proxy = parseproxy(os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"))
if proxy[1] and proxy[2]:
auth = base64.encodestring("%s:%s" % (proxy[1], proxy[2]))
headers["Authorization"] = "Basic %s" % auth
conn = httplib.HTTPConnection(proxy[3])
conn.request("POST", "http://%s/ClientPost/" % server, params, headers)
else:
conn = httplib.HTTPConnection(server)
conn.request("POST", "/ClientPost/", params, headers)
return conn
def sendData(json_file, server):
@ -45,10 +77,7 @@ def sendData(json_file, server):
return
try:
params = urllib.urlencode({'data': data})
headers = {"Content-type": "application/json"}
conn = httplib.HTTPConnection(server)
conn.request("POST", "/ClientPost/", params, headers)
conn = handle_connection(server, data)
response = conn.getresponse()
print response.status, response.reason
res = response.read()
@ -59,8 +88,8 @@ def sendData(json_file, server):
with open("%s.response.html" % json_file, "w") as f:
f.write(res)
conn.close()
except:
print("Server connection failed")
except Exception as e:
print("Server connection failed: %s" % e)
else:
print("No data file found.")