def request2har(request, operation, outgoing_data=None): """ Serialize QNetworkRequest to HAR. """ return { "method": OPERATION_NAMES.get(operation, '?'), "url": six.text_type(request.url().toString()), "httpVersion": "HTTP/1.1", "cookies": request_cookies2har(request), "queryString": querystring2har(request.url()), "headers": headers2har(request), "headersSize": headers_size(request), "bodySize": outgoing_data.size() if outgoing_data is not None else -1, }
def request2har(request, operation, content=None): """ Serialize QNetworkRequest to HAR. """ har = { "method": OPERATION_NAMES.get(operation, '?'), "url": str(request.url().toString()), "httpVersion": "HTTP/1.1", "cookies": request_cookies2har(request), "queryString": querystring2har(request.url()), "headers": headers2har(request), "headersSize": headers_size(request), "bodySize": -1 } if content is not None: har["bodySize"] = len(content) content_type = request.header(QNetworkRequest.ContentTypeHeader) har["postData"] = _har_postdata(content, content_type) else: content_length = request.header(QNetworkRequest.ContentLengthHeader) if content_length is not None: har["bodySize"] = content_length return har
def createRequest(self, operation, request, outgoingData=None): """ This method is called when a new request is sent; it must return a reply object to work with. """ start_time = datetime.utcnow() request = self._wrapRequest(request) har_entry = self._harEntry(request, create=True) if har_entry is not None: if outgoingData is None: bodySize = -1 else: bodySize = outgoingData.size() har_entry.update({ '_tmp': { 'start_time': start_time, 'request_start_sending_time': start_time, 'request_sent_time': start_time, 'response_start_time': start_time, # 'outgoingData': outgoingData, 'state': self.REQUEST_CREATED, }, "startedDateTime": har.format_datetime(start_time), "request": { "method": OPERATION_NAMES.get(operation, '?'), "url": unicode(request.url().toString()), "httpVersion": "HTTP/1.1", "cookies": har_qt.request_cookies2har(request), "queryString": har_qt.querystring2har(request.url()), "headers": har_qt.headers2har(request), "headersSize" : har_qt.headers_size(request), "bodySize": bodySize, }, "response": { "bodySize": -1, }, "cache": {}, "timings": { "blocked": -1, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0, "receive": 0, }, "time": 0, }) with self._proxyApplied(request): reply = super(ProxiedQNetworkAccessManager, self).createRequest( operation, request, outgoingData ) if har_entry is not None: har_entry["response"].update(har_qt.reply2har(reply)) reply.error.connect(self._handleError) reply.finished.connect(self._handleFinished) reply.metaDataChanged.connect(self._handleMetaData) reply.downloadProgress.connect(self._handleDownloadProgress) return reply
def createRequest(self, operation, request, outgoingData=None): """ This method is called when a new request is sent; it must return a reply object to work with. """ start_time = datetime.utcnow() request = self._wrapRequest(request) self._handle_custom_headers(request) self._handle_request_cookies(request) har_entry = self._harEntry(request, create=True) if har_entry is not None: if outgoingData is None: bodySize = -1 else: bodySize = outgoingData.size() har_entry.update({ '_tmp': { 'start_time': start_time, 'request_start_sending_time': start_time, 'request_sent_time': start_time, 'response_start_time': start_time, # 'outgoingData': outgoingData, 'state': self.REQUEST_CREATED, }, "startedDateTime": har.format_datetime(start_time), "request": { "method": OPERATION_NAMES.get(operation, '?'), "url": unicode(request.url().toString()), "httpVersion": "HTTP/1.1", "cookies": har_qt.request_cookies2har(request), "queryString": har_qt.querystring2har(request.url()), "headers": har_qt.headers2har(request), "headersSize": har_qt.headers_size(request), "bodySize": bodySize, }, "response": { "bodySize": -1, }, "cache": {}, "timings": { "blocked": -1, "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 0, "receive": 0, }, "time": 0, }) with self._proxyApplied(request): reply = super(ProxiedQNetworkAccessManager, self).createRequest(operation, request, outgoingData) if har_entry is not None: har_entry["response"].update(har_qt.reply2har(reply)) reply.error.connect(self._handleError) reply.finished.connect(self._handleFinished) reply.metaDataChanged.connect(self._handleMetaData) reply.downloadProgress.connect(self._handleDownloadProgress) return reply