我们从Python开源项目中,提取了以下42个代码示例,用于说明如何使用http.client.IncompleteRead()。
def __init__(self, e, uri, format, uriparts): self.e = e self.uri = uri self.format = format self.uriparts = uriparts try: data = self.e.fp.read() except http_client.IncompleteRead as e: # can't read the error text # let's try some of it data = e.partial if self.e.headers.get('Content-Encoding') == 'gzip': buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) self.response_data = f.read() else: self.response_data = data super(TwitterHTTPError, self).__init__(str(self))
def open (self, filepart = None, data = None, do_soup = True) : filepart = filepart or self.nextfile url = '/'.join (('%s:/' % self.args.protocol, self.args.host, filepart)) if data : data = data.encode ('ascii') rq = Request (url, data) self.f = f = self.opener.open (rq, timeout = 10) if do_soup : # Sometimes we get incomplete read. So we read everything # the server sent us and hope this is ok. Note: This means # we cannot pass the file to BeautifulSoup but need to read # everything here. try: page = f.read () except IncompleteRead as e: page = e.partial self.soup = BeautifulSoup (page, "lxml") self.purl = f.geturl () self.info = f.info () # end def open
def _update_chunk_length(self): # First, we'll figure out length of a chunk and then # we'll try to read it from socket. if self.chunk_left is not None: return line = self._fp.fp.readline() line = line.split(b';', 1)[0] try: self.chunk_left = int(line, 16) except ValueError: # Invalid chunked protocol response, abort. self.close() raise httplib.IncompleteRead(line)
def __init__(self, e, uri, format, uriparts): self.e = e self.uri = uri self.format = format self.uriparts = uriparts try: data = self.e.fp.read() except http_client.IncompleteRead as e: # can't read the error text # let's try some of it data = e.partial if self.e.headers.get('Content-Encoding') == 'gzip': buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() if len(data) == 0: data = {} else: data = data.decode('utf8') if "json" == self.format: try: data = json.loads(data) except ValueError: # We try to load the response as json as a nicety; if it fails, carry on. pass self.response_data = data super(TwitterHTTPError, self).__init__(str(self))
def _handle_response(self, req, uri, arg_data, _timeout=None): kwargs = {} if _timeout: kwargs['timeout'] = _timeout try: handle = urllib_request.urlopen(req, **kwargs) if handle.headers['Content-Type'] in ['image/jpeg', 'image/png']: return handle try: data = handle.read() except http_client.IncompleteRead as e: # Even if we don't get all the bytes we should have there # may be a complete response in e.partial data = e.partial if handle.info().get('Content-Encoding') == 'gzip': # Handle gzip decompression buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() if len(data) == 0: return wrap_response({}, handle.headers) elif "json" == self.format: res = json.loads(data.decode('utf8')) return wrap_response(res, handle.headers) else: return wrap_response( data.decode('utf8'), handle.headers) except urllib_error.HTTPError as e: if (e.code == 304): return [] else: raise TwitterHTTPError(e, uri, self.format, arg_data)
def test_chunked(self): chunked_start = ( 'HTTP/1.1 200 OK\r\n' 'Transfer-Encoding: chunked\r\n\r\n' 'a\r\n' 'hello worl\r\n' '1\r\n' 'd\r\n' ) sock = FakeSocket(chunked_start + '0\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() self.assertEqual(resp.read(), b'hello world') resp.close() for x in ('', 'foo\r\n'): sock = FakeSocket(chunked_start + x) resp = client.HTTPResponse(sock, method="GET") resp.begin() try: resp.read() except client.IncompleteRead as i: self.assertEqual(i.partial, b'hello world') self.assertEqual(repr(i),'IncompleteRead(11 bytes read)') self.assertEqual(str(i),'IncompleteRead(11 bytes read)') else: self.fail('IncompleteRead expected') finally: resp.close()
def test_incomplete_read(self): sock = FakeSocket('HTTP/1.1 200 OK\r\nContent-Length: 10\r\n\r\nHello\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() try: resp.read() except client.IncompleteRead as i: self.assertEqual(i.partial, b'Hello\r\n') self.assertEqual(repr(i), "IncompleteRead(7 bytes read, 3 more expected)") self.assertEqual(str(i), "IncompleteRead(7 bytes read, 3 more expected)") else: self.fail('IncompleteRead expected') finally: resp.close()
def __init__(self, e, uri, format, uriparts): self.e = e self.uri = uri self.format = format self.uriparts = uriparts try: data = self.e.fp.read() except http_client.IncompleteRead as e: data = e.partial if self.e.headers.get('Content-Encoding') == 'gzip': buf = BytesIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() if len(data) == 0: data = {} else: data = data.decode('utf-8') if self.format == 'json': try: data = json.loads(data) except ValueError: pass self.response_data = data super(FanfouHTTPError, self).__init__(str(self))
def _handle_response(self, req, uri, arg_data, _timeout=None): kwargs = {} if _timeout: kwargs['timeout'] = _timeout try: handle = urllib_request.urlopen(req, **kwargs) if handle.headers['Content-Type'] in ['image/jpeg', 'image/png', 'image/gif']: print(handle.headers['Content-Type']) return handle try: data = handle.read() except http_client.IncompleteRead as e: # Even if we don't get all the bytes we should have there # may be a complete response in e.partial data = e.partial if handle.info().get('Content-Encoding') == 'gzip': # Handle gzip decompression. buf = BytesIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() if len(data) == 0: return wrap_response({}, handle.headers) elif 'json' == self.format: res = json.loads(data.decode('utf-8')) return wrap_response(res, handle.headers) else: return wrap_response( data.decode('utf-8'), handle.headers) except urllib_error.HTTPError as e: if (e.code == 304): return [] else: raise FanfouHTTPError(e, uri, self.format, arg_data)
def test_incomplete_read(self): sock = FakeSocket('HTTP/1.1 200 OK\r\nContent-Length: 10\r\n\r\nHello\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() try: resp.read() except client.IncompleteRead as i: self.assertEqual(i.partial, b'Hello\r\n') self.assertEqual(repr(i), "IncompleteRead(7 bytes read, 3 more expected)") self.assertEqual(str(i), "IncompleteRead(7 bytes read, 3 more expected)") self.assertTrue(resp.isclosed()) else: self.fail('IncompleteRead expected')
def _handle_response(self, req, uri, arg_data, _timeout=None): kwargs = {} if _timeout: kwargs['timeout'] = _timeout try: handle = urllib_request.urlopen(req, **kwargs) if handle.headers['Content-Type'] in ['image/jpeg', 'image/png']: return handle try: data = handle.read() except http_client.IncompleteRead as e: # Even if we don't get all the bytes we should have there # may be a complete response in e.partial data = e.partial if handle.info().get('Content-Encoding') == 'gzip': # Handle gzip decompression buf = StringIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() if "json" == self.format: res = json.loads(data.decode('utf8')) return wrap_response(res, handle.headers) else: return wrap_response( data.decode('utf8'), handle.headers) except urllib_error.HTTPError as e: if (e.code == 304): return [] else: raise TwitterHTTPError(e, uri, self.format, arg_data)
def osu_get(conn, endpoint, paramsdict=None): '''GETs /api/endpoint?paramsdict&k=args.key from conn. return json object, exits process on api errors''' global osu_treset, osu_ncalls, args sys.stderr.write("%s %s\n" % (endpoint, str(paramsdict))) paramsdict["k"] = args.key path = "/api/%s?%s" % (endpoint, urllib.urlencode(paramsdict)) while True: while True: if time.time() >= osu_treset: osu_ncalls = 0 osu_treset = time.time() + 60 sys.stderr.write("\napi ready\n") if osu_ncalls < 60: break else: sys.stderr.write("waiting for api cooldown...\r") time.sleep(1) try: conn.request("GET", path) osu_ncalls += 1 r = conn.getresponse() raw = "" while True: try: raw += r.read() break except httplib.IncompleteRead as e: raw += e.partial j = json.loads(raw) if "error" in j: sys.stderr.write("%s\n" % j["error"]) sys.exit(1) return j except (httplib.HTTPException, ValueError) as e: sys.stderr.write("%s\n" % (traceback.format_exc())) try: ''' prevents exceptions on next request if the response wasn't previously read due to errors ''' conn.getresponse().read() except httplib.HTTPException: pass time.sleep(5)
def test_chunked(self): chunked_start = ( 'HTTP/1.1 200 OK\r\n' 'Transfer-Encoding: chunked\r\n\r\n' 'a\r\n' 'hello worl\r\n' '3\r\n' 'd! \r\n' '8\r\n' 'and now \r\n' '22\r\n' 'for something completely different\r\n' ) expected = b'hello world! and now for something completely different' sock = FakeSocket(chunked_start + '0\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() self.assertEqual(resp.read(), expected) resp.close() # Various read sizes for n in range(1, 12): sock = FakeSocket(chunked_start + '0\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() self.assertEqual(resp.read(n) + resp.read(n) + resp.read(), expected) resp.close() for x in ('', 'foo\r\n'): sock = FakeSocket(chunked_start + x) resp = client.HTTPResponse(sock, method="GET") resp.begin() try: resp.read() except client.IncompleteRead as i: self.assertEqual(i.partial, expected) expected_message = 'IncompleteRead(%d bytes read)' % len(expected) self.assertEqual(repr(i), expected_message) self.assertEqual(str(i), expected_message) else: self.fail('IncompleteRead expected') finally: resp.close()
def test_readinto_chunked(self): chunked_start = ( 'HTTP/1.1 200 OK\r\n' 'Transfer-Encoding: chunked\r\n\r\n' 'a\r\n' 'hello worl\r\n' '3\r\n' 'd! \r\n' '8\r\n' 'and now \r\n' '22\r\n' 'for something completely different\r\n' ) expected = b'hello world! and now for something completely different' nexpected = len(expected) b = bytearray(128) sock = FakeSocket(chunked_start + '0\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() n = resp.readinto(b) self.assertEqual(b[:nexpected], expected) self.assertEqual(n, nexpected) resp.close() # Various read sizes for n in range(1, 12): sock = FakeSocket(chunked_start + '0\r\n') resp = client.HTTPResponse(sock, method="GET") resp.begin() m = memoryview(b) i = resp.readinto(m[0:n]) i += resp.readinto(m[i:n + i]) i += resp.readinto(m[i:]) self.assertEqual(b[:nexpected], expected) self.assertEqual(i, nexpected) resp.close() for x in ('', 'foo\r\n'): sock = FakeSocket(chunked_start + x) resp = client.HTTPResponse(sock, method="GET") resp.begin() try: n = resp.readinto(b) except client.IncompleteRead as i: self.assertEqual(i.partial, expected) expected_message = 'IncompleteRead(%d bytes read)' % len(expected) self.assertEqual(repr(i), expected_message) self.assertEqual(str(i), expected_message) else: self.fail('IncompleteRead expected') finally: resp.close()