{ "info": { "author": "Noah Levitt", "author_email": "nlevitt@archive.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "License :: OSI Approved :: GNU General Public License (GPL)", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: Proxy Servers", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving" ], "description": "Warcprox - WARC writing MITM HTTP/S proxy\n*****************************************\n.. image:: https://travis-ci.org/internetarchive/warcprox.svg?branch=master\n :target: https://travis-ci.org/internetarchive/warcprox\n\nWarcprox is an HTTP proxy designed for web archiving applications. When used in\nparallel with `brozzler `_ it\nsupports a comprehensive, modern, and distributed archival web capture system.\nWarcprox stores its traffic to disk in the `Web ARChive (WARC) file format\n`_,\nwhich may then be accessed with web archival replay software like `OpenWayback\n`_ and `pywb\n`_. It captures encrypted HTTPS traffic by\nusing the \"man-in-the-middle\" technique (see the `Man-in-the-middle`_ section\nfor more info).\n\nWarcprox was originally based on `pymiproxy\n`_ by Nadeem Douba.\n\n.. contents::\n\nGetting started\n===============\nWarcprox runs on python 3.4+.\n\nTo install latest release run::\n\n # apt-get install libffi-dev libssl-dev\n pip install warcprox\n\nYou can also install the latest bleeding edge code::\n\n pip install git+https://github.com/internetarchive/warcprox.git\n\nTo start warcprox run::\n\n warcprox\n\nTry ``warcprox --help`` for documentation on command line options.\n\nMan-in-the-middle\n=================\nNormally, HTTP proxies can't read encrypted HTTPS traffic. The browser uses the\nHTTP ``CONNECT`` method to establish a tunnel through the proxy, and the proxy\nmerely routes raw bytes between the client and server. Since the bytes are\nencrypted, the proxy can't make sense of the information that it proxies. This\nnonsensical encrypted data is not typically useful for web archiving purposes.\n\nIn order to capture HTTPS traffic, warcprox acts as a \"man-in-the-middle\"\n(MITM). When it receives a ``CONNECT`` directive from a client, it generates a\npublic key certificate for the requested site, presents to the client, and\nproceeds to establish an encrypted connection with the client. It then makes a\nseparate, normal HTTPS connection to the remote site. It decrypts, archives,\nand re-encrypts traffic in both directions.\n\nConfiguring a warcprox instance as a browser\u2019s HTTP proxy will result in\nsecurity certificate warnings because none of the certificates will be signed\nby trusted authorities. However, there is nothing malicious about warcprox\nfunctions. To use warcprox effectively, the client needs to disable certificate\nverification or add the CA certificate generated by warcprox as a trusted\nauthority. When using the latter, remember to undo this change when finished\nusing warcprox.\n\nAPI\n===\nThe warcprox API may be used to retrieve information from and interact with a\nrunning warcprox instance, including:\n\n* Retrieving status information via ``/status`` URL\n* Writing WARC records via ``WARCPROX_WRITE_RECORD`` HTTP method\n* Controlling warcprox settings via the ``Warcprox-Meta`` HTTP header\n\nFor warcprox API documentation, see: ``_.\n\nDeduplication\n=============\nWarcprox avoids archiving redundant content by \"deduplicating\" it. The process\nfor deduplication works similarly to deduplication by `Heritrix\n`_ and other web archiving tools:\n\n1. While fetching URL, calculate payload content digest (typically SHA1\n checksum value)\n2. Look up digest in deduplication database (warcprox currently supports\n `sqlite `_ by default, `rethinkdb\n `_ with two different schemas, and\n `trough `_)\n3. If found, write warc ``revisit`` record referencing the url and capture time\n of the previous capture\n4. If not found,\n\n a. Write ``response`` record with full payload\n b. Store new entry in deduplication database (can be disabled, see\n `Warcprox-Meta HTTP request header `_)\n\nThe deduplication database is partitioned into different \"buckets\". URLs are\ndeduplicated only against other captures in the same bucket. If specified, the\n``dedup-buckets`` field of the `Warcprox-Meta HTTP request header\n`_ determines the bucket(s). Otherwise,\nthe default bucket is used.\n\nDeduplication can be disabled entirely by starting warcprox with the argument\n``--dedup-db-file=/dev/null``.\n\nStatistics\n==========\nWarcprox stores some crawl statistics to sqlite or rethinkdb. These are\nconsulted for enforcing ``limits`` and ``soft-limits`` (see `Warcprox-Meta\nfields `_), and can also be consulted by other\nprocesses outside of warcprox, such as for crawl job reporting.\n\nStatistics are grouped by \"bucket\". Every capture is counted as part of the\n``__all__`` bucket. Other buckets can be specified in the ``Warcprox-Meta``\nrequest header. The fallback bucket in case none is specified is called\n``__unspecified__``.\n\nWithin each bucket are three sub-buckets:\n\n* ``new`` - tallies captures for which a complete record (usually a\n ``response`` record) was written to a WARC file\n* ``revisit`` - tallies captures for which a ``revisit`` record was written to\n a WARC file\n* ``total`` - includes all URLs processed, even those not written to a WARC\n file, and so may be greater than the sum of new and revisit records\n\nWithin each of these sub-buckets, warcprox generates two kinds of statistics:\n\n* ``urls`` - simple count of URLs\n* ``wire_bytes`` - sum of bytes received over the wire from the remote server\n for each URL, including HTTP headers\n\nFor historical reasons, the default sqlite store keeps statistics as JSON blobs::\n\n sqlite> select * from buckets_of_stats;\n bucket stats\n --------------- ---------------------------------------------------------------------------------------------\n __unspecified__ {\"bucket\":\"__unspecified__\",\"total\":{\"urls\":37,\"wire_bytes\":1502781},\"new\":{\"urls\":15,\"wire_bytes\":1179906},\"revisit\":{\"urls\":22,\"wire_bytes\":322875}}\n __all__ {\"bucket\":\"__all__\",\"total\":{\"urls\":37,\"wire_bytes\":1502781},\"new\":{\"urls\":15,\"wire_bytes\":1179906},\"revisit\":{\"urls\":22,\"wire_bytes\":322875}}\n\nPlugins\n=======\nWarcprox supports a limited notion of plugins by way of the ``--plugin``\ncommand line argument. Plugin classes are loaded from the regular python module\nsearch path. They are instantiated with one argument that contains the values\nof all command line arguments, ``warcprox.Options``. Legacy plugins with\nconstructors that take no arguments are also supported. Plugins should either\nhave a method ``notify(self, recorded_url, records)`` or should subclass\n``warcprox.BasePostfetchProcessor``. More than one plugin can be configured by\nspecifying ``--plugin`` multiples times.\n\nSee a minimal example `here\n`__.\n\nArchitecture\n============\n.. image:: arch.svg\n\nWarcprox is multithreaded. It has pool of http proxy threads (100 by default).\nWhen handling a request, a proxy thread records data from the remote server to\nan in-memory buffer that spills over to disk if necessary (after 512k by\ndefault), while it streams the data to the proxy client. Once the HTTP\ntransaction is complete, it puts the recorded URL in a thread-safe queue, to be\npicked up by the first processor in the postfetch chain.\n\nThe postfetch chain normally includes processors for loading deduplication\ninformation, writing records to the WARC, saving deduplication information, and\nupdating statistics. The exact set of processors in the chain depends on\ncommand line arguments; for example, plugins specified with ``--plugin`` are\nprocessors in the postfetch chain. Each postfetch processor has its own thread\nor threads. Thus the processors are able to run in parallel, independent of one\nanother. This design also enables them to process URLs in batch. For example,\nthe statistics processor gathers statistics for up to 10 seconds or 500 URLs,\nwhichever comes first, then updates the statistics database with just a few\nqueries.\n\nLicense\n=======\n\nWarcprox is a derivative work of pymiproxy, which is GPL. Thus warcprox is also\nGPL.\n\n* Copyright (C) 2012 Cygnos Corporation\n* Copyright (C) 2013-2018 Internet Archive\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/internetarchive/warcprox", "keywords": "", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "warcprox", "package_url": "https://pypi.org/project/warcprox/", "platform": "", "project_url": "https://pypi.org/project/warcprox/", "project_urls": { "Homepage": "https://github.com/internetarchive/warcprox" }, "release_url": "https://pypi.org/project/warcprox/2.4.17/", "requires_dist": null, "requires_python": "", "summary": "WARC writing MITM HTTP/S proxy", "version": "2.4.17" }, "last_serial": 5590792, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "f25d57905af5b1d475b933a8aea69a83", "sha256": "a7cd960e5a7b77bb8db02c9e33653bfb90ce41580cade3df312e73b4a43fb671" }, "downloads": -1, "filename": "warcprox-1.0.tar.gz", "has_sig": false, "md5_digest": "f25d57905af5b1d475b933a8aea69a83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16507, "upload_time": "2013-11-28T09:25:56", "url": "https://files.pythonhosted.org/packages/d4/17/ddf8c6813b4b350677952d3e91752ca2513e3a7f8ca252f44b8475fb4565/warcprox-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "4c3eb3c25637d8da46384f1276390bb5", "sha256": "971e79a95cf72b3072899b378d6e675a75ccd76774fc81fdd2c93dc625ffac76" }, "downloads": -1, "filename": "warcprox-1.1.tar.gz", "has_sig": false, "md5_digest": "4c3eb3c25637d8da46384f1276390bb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17592, "upload_time": "2013-12-20T01:06:49", "url": "https://files.pythonhosted.org/packages/41/bb/1ae355c0867c49a830c0ae610994a3ced9918f3efc8ad5e0b0e18aa578cd/warcprox-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "afe50a8edbe97ff389bb61e00babe901", "sha256": "bf2e80a99379ee6443a6368c05a6667563425721ffed21e8cbbd02da54540d89" }, "downloads": -1, "filename": "warcprox-1.2.tar.gz", "has_sig": false, "md5_digest": "afe50a8edbe97ff389bb61e00babe901", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18080, "upload_time": "2014-08-06T02:05:23", "url": "https://files.pythonhosted.org/packages/43/2d/12073a1b78dc401a7bb9f361461ccf66d48b581e1a64c8de3c2bb30e6347/warcprox-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "e8b361988cd2356fe9fa9ab4bdb17834", "sha256": "702695d7529cef392631c3dd5cacdfee892cd124c57ddb2d1c793f09857c6c4b" }, "downloads": -1, "filename": "warcprox-1.3.tar.gz", "has_sig": false, "md5_digest": "e8b361988cd2356fe9fa9ab4bdb17834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18694, "upload_time": "2014-08-08T19:54:34", "url": "https://files.pythonhosted.org/packages/b6/aa/4b2615bd53757334fdd24e5a240c529b4c8bc4770d3cdf97e2260de9eab0/warcprox-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "ea98050746a5755c18fa53916e8dd100", "sha256": "39a50e9ad06f0250b1e4b0821840072d49c8077734a6293a5ad804b36c76c5c7" }, "downloads": -1, "filename": "warcprox-1.4.tar.gz", "has_sig": false, "md5_digest": "ea98050746a5755c18fa53916e8dd100", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18735, "upload_time": "2015-06-12T22:06:48", "url": "https://files.pythonhosted.org/packages/08/77/8edbcd19009a0f3699442c0fbb792928b9d2dbf17f8a959a12f58b8155b3/warcprox-1.4.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "e97923d6b70258e2308db02e0aaba027", "sha256": "52745bfb3c2a242d4761e60bd191bba40f5abf0ea11f2bd67c532f206fc8cfb6" }, "downloads": -1, "filename": "warcprox-2.0.tar.gz", "has_sig": false, "md5_digest": "e97923d6b70258e2308db02e0aaba027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36258, "upload_time": "2017-01-31T19:01:20", "url": "https://files.pythonhosted.org/packages/cb/eb/dc92b7278119a7e66df7025dc4c39cec99adedc50e2a0e45494618cecdbf/warcprox-2.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "a2c6e45fc1a19da16ca9b4366af76a0b", "sha256": "c3acb43cc009221152562d2eaba96de1785e17be9c3c0c006e31451d0b0561b5" }, "downloads": -1, "filename": "warcprox-2.0.1.tar.gz", "has_sig": false, "md5_digest": "a2c6e45fc1a19da16ca9b4366af76a0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36490, "upload_time": "2017-02-14T21:56:54", "url": "https://files.pythonhosted.org/packages/23/12/c20482c713bda39644e5026b3cc2fa2701204483074f99b8f5965057f2d1/warcprox-2.0.1.tar.gz" } ], "2.0.dev9": [ { "comment_text": "", "digests": { "md5": "1e92dc8c81aa7f5d24bba03d52ae3034", "sha256": "726a8e72f1a713281bd3a519c9eb41ba46e99f192915a8ef03907474c077dd59" }, "downloads": -1, "filename": "warcprox-2.0.dev9.tar.gz", "has_sig": false, "md5_digest": "1e92dc8c81aa7f5d24bba03d52ae3034", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33130, "upload_time": "2016-05-11T18:47:16", "url": "https://files.pythonhosted.org/packages/ff/c4/533986e4c76030ed119ab3401ad09bc2e8002ca49e51f5297c9608426487/warcprox-2.0.dev9.tar.gz" } ], "2.0b1": [ { "comment_text": "", "digests": { "md5": "d039eb9f82f132d9d5219c58ce91104f", "sha256": "3f7c936ea1d5873df98583a029b8295c1d06aeb35901e133b02fd0708a284fa6" }, "downloads": -1, "filename": "warcprox-2.0b1.tar.gz", "has_sig": false, "md5_digest": "d039eb9f82f132d9d5219c58ce91104f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34842, "upload_time": "2016-07-22T00:10:24", "url": "https://files.pythonhosted.org/packages/00/27/758e5d7f81fafa0ef907d61631ddf66962f3b8510d7c25010b9bb315b751/warcprox-2.0b1.tar.gz" } ], "2.0b2": [ { "comment_text": "", "digests": { "md5": "76f14824382a9488b06b45c900e98f02", "sha256": "463a2f15f6062ddad1d32e09530b4b5dc16451083327a8e411dd11a8d0cfc280" }, "downloads": -1, "filename": "warcprox-2.0b2.tar.gz", "has_sig": false, "md5_digest": "76f14824382a9488b06b45c900e98f02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35998, "upload_time": "2016-11-21T23:20:15", "url": "https://files.pythonhosted.org/packages/f7/5e/54a398ea8f6cce519fc8b647c7af2b05244f4267fa3a063efd6aadf1caa7/warcprox-2.0b2.tar.gz" } ], "2.1b1.dev60": [ { "comment_text": "", "digests": { "md5": "152bd11168f8e4a8633426550c206c05", "sha256": "fba6481719d0ca23fdda596e0f754e12e2f1f2de69da111c33907aa02e2e16b0" }, "downloads": -1, "filename": "warcprox-2.1b1.dev60.tar.gz", "has_sig": false, "md5_digest": "152bd11168f8e4a8633426550c206c05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35878, "upload_time": "2017-03-24T21:17:49", "url": "https://files.pythonhosted.org/packages/6e/0c/7170a86a5a43cbb886508a77b51f87f6567f15f8d3ede4b7568b0320b613/warcprox-2.1b1.dev60.tar.gz" } ], "2.1b1.dev68": [ { "comment_text": "", "digests": { "md5": "12e51eadee364addf5b18923eca1e5fd", "sha256": "78dae688a2d3040126ffc70b474e1ffa508ffc5a7accf1b187795ecaf66e426e" }, "downloads": -1, "filename": "warcprox-2.1b1.dev68.tar.gz", "has_sig": false, "md5_digest": "12e51eadee364addf5b18923eca1e5fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36711, "upload_time": "2017-04-17T18:08:58", "url": "https://files.pythonhosted.org/packages/8b/2f/c27ef95e6d23208f11fbecb8f45c12d0d21f09c2cc5b6642264c456bfd3c/warcprox-2.1b1.dev68.tar.gz" } ], "2.1b1.dev71": [ { "comment_text": "", "digests": { "md5": "4cbd23cd36089d44deaad6059038b422", "sha256": "0b938d1466f396fb1bdd8d6a36c05155c96692e84970971a482d04ce66579467" }, "downloads": -1, "filename": "warcprox-2.1b1.dev71.tar.gz", "has_sig": false, "md5_digest": "4cbd23cd36089d44deaad6059038b422", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36713, "upload_time": "2017-04-17T20:30:21", "url": "https://files.pythonhosted.org/packages/82/41/d1d8650007daef9ea77ddfbcc6ea7811df498c64e2c45e086817be1af3d0/warcprox-2.1b1.dev71.tar.gz" } ], "2.1b1.dev86": [ { "comment_text": "", "digests": { "md5": "d8cb6068e2fea62bea38699f20ebdcaf", "sha256": "c5da655c912cebede67c4b0869c0e2f27ed64d6ae508b6886242bc635a905d0f" }, "downloads": -1, "filename": "warcprox-2.1b1.dev86.tar.gz", "has_sig": false, "md5_digest": "d8cb6068e2fea62bea38699f20ebdcaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38024, "upload_time": "2017-05-23T17:38:33", "url": "https://files.pythonhosted.org/packages/73/75/8985836800d883c570121cd12613758e894df262b105b8092f852921efc8/warcprox-2.1b1.dev86.tar.gz" } ], "2.1b1.dev87": [ { "comment_text": "", "digests": { "md5": "0c36c05104aa511a71669d6452b12eb9", "sha256": "b7805d589c3997909de057068efd1e610a9513dcc1a96b84208ebf514ea3a3c4" }, "downloads": -1, "filename": "warcprox-2.1b1.dev87.tar.gz", "has_sig": false, "md5_digest": "0c36c05104aa511a71669d6452b12eb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37350, "upload_time": "2017-05-26T20:19:28", "url": "https://files.pythonhosted.org/packages/ea/70/6fd44d003b2b2b73a32a62698635962eac506f0c0feae455e8067c5b762b/warcprox-2.1b1.dev87.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "60b11bafc2a024fc033ad99066f7e384", "sha256": "383f55c9bb6964d7b0959afa5eafd6eb7fffab58ff29de5719222db6c720e7fe" }, "downloads": -1, "filename": "warcprox-2.2.tar.gz", "has_sig": false, "md5_digest": "60b11bafc2a024fc033ad99066f7e384", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37106, "upload_time": "2017-10-26T16:58:40", "url": "https://files.pythonhosted.org/packages/97/66/bb4fc9bc8abfe97dc71bb9b3a54a1764ad548ce15bbcebf610e0ef02c914/warcprox-2.2.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "84a2b3dd29163670a7e6c885d1bd75c9", "sha256": "d4faa76b82d0d6896129a02f9aedc12b806c53a0cdfe518dfc11cf8e2d2b1b22" }, "downloads": -1, "filename": "warcprox-2.3.tar.gz", "has_sig": false, "md5_digest": "84a2b3dd29163670a7e6c885d1bd75c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43044, "upload_time": "2017-12-16T00:43:51", "url": "https://files.pythonhosted.org/packages/45/6a/25dc668f625d14a64dd20283f4dc03f41433f02de0fc21aa7aa081fa0db6/warcprox-2.3.tar.gz" } ], "2.4.17": [ { "comment_text": "", "digests": { "md5": "46593a40e98d763ad0ef6c9211d86450", "sha256": "8c98dca4c5d38e078e59ad261c66b1aeb407df0745238992da976e1f69e2f6ae" }, "downloads": -1, "filename": "warcprox-2.4.17.tar.gz", "has_sig": false, "md5_digest": "46593a40e98d763ad0ef6c9211d86450", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79163, "upload_time": "2019-07-26T21:04:26", "url": "https://files.pythonhosted.org/packages/97/2a/699279920300e3e100ec017162a0cf0fe5c6a8b1fbf0328d282459061892/warcprox-2.4.17.tar.gz" } ], "2.4.9": [ { "comment_text": "", "digests": { "md5": "0255f290b7b4c2f08e9ad0a8cc29dc15", "sha256": "442b9d67175769235c7891214ed5654bdf03e8404b63d7a7eebe5290b59ed50d" }, "downloads": -1, "filename": "warcprox-2.4.9.tar.gz", "has_sig": false, "md5_digest": "0255f290b7b4c2f08e9ad0a8cc29dc15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77088, "upload_time": "2019-05-06T17:53:43", "url": "https://files.pythonhosted.org/packages/e5/c1/08e5259ca02ebb7257b48c2c49d12fe012ecc8922bec44cdffd959d37758/warcprox-2.4.9.tar.gz" } ], "2.4b1": [ { "comment_text": "", "digests": { "md5": "dde59cfda7572ddd35853b4c4af7e309", "sha256": "b2998e058be9fc5c58283715b1abbc322ab46fd1825d3675a653bfadd02f440a" }, "downloads": -1, "filename": "warcprox-2.4b1.tar.gz", "has_sig": false, "md5_digest": "dde59cfda7572ddd35853b4c4af7e309", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47873, "upload_time": "2018-02-02T22:14:03", "url": "https://files.pythonhosted.org/packages/f0/07/4ef0447ec96384a9d29b97d57905a209bd71c89409e179c942fd3bd60f02/warcprox-2.4b1.tar.gz" } ], "2.4b2": [ { "comment_text": "", "digests": { "md5": "a91e04551d6d641b06ae5b0bbf4e3910", "sha256": "4a2083e0cf59f7d88ae83bb6f6c7e066ee330d907fb5640a492d9f1f668fc71f" }, "downloads": -1, "filename": "warcprox-2.4b2.tar.gz", "has_sig": false, "md5_digest": "a91e04551d6d641b06ae5b0bbf4e3910", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75286, "upload_time": "2018-07-17T16:40:56", "url": "https://files.pythonhosted.org/packages/22/bf/43653a6c83027b31256d33cb24466d0b928d7a5dbacac1088a62b2e17ee0/warcprox-2.4b2.tar.gz" } ], "2.4b3": [ { "comment_text": "", "digests": { "md5": "cc464fc9791a0fe76f0b83ee5ab0230a", "sha256": "760439a8a2aa1b227ee5cb8cbdf7272fec9b3121b2aecb3f4b661c0a73eabb23" }, "downloads": -1, "filename": "warcprox-2.4b3.tar.gz", "has_sig": false, "md5_digest": "cc464fc9791a0fe76f0b83ee5ab0230a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76314, "upload_time": "2019-01-09T23:15:24", "url": "https://files.pythonhosted.org/packages/1c/63/7a60024c9a01c7407757474dcd428bf21a6fad6272a1021c22ca5a955067/warcprox-2.4b3.tar.gz" } ], "2.4b5": [ { "comment_text": "", "digests": { "md5": "5bc8e3e72bc3933feedf8de1c4ee7fac", "sha256": "316ef4bcf8332a712941f5666e3aa0760130fa7e58896d75c3c122fcae83f2d3" }, "downloads": -1, "filename": "warcprox-2.4b5.tar.gz", "has_sig": false, "md5_digest": "5bc8e3e72bc3933feedf8de1c4ee7fac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76500, "upload_time": "2019-01-22T23:10:18", "url": "https://files.pythonhosted.org/packages/e3/ce/af98e6573780877ce572ad8528708799af1860a49f4a8dc714ef3a524fc3/warcprox-2.4b5.tar.gz" } ], "2.4b6": [ { "comment_text": "", "digests": { "md5": "c637a6e143ff744e910d2594a63e6d04", "sha256": "b44493af9487356825a84fe18ebb12d578339ecc76968a938cbfded1bf072a68" }, "downloads": -1, "filename": "warcprox-2.4b6.tar.gz", "has_sig": false, "md5_digest": "c637a6e143ff744e910d2594a63e6d04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76612, "upload_time": "2019-02-12T22:59:19", "url": "https://files.pythonhosted.org/packages/d9/7c/dfad72a1bff14c9d6defb2bf403f56b1f12381afe24610197349eb896138/warcprox-2.4b6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "46593a40e98d763ad0ef6c9211d86450", "sha256": "8c98dca4c5d38e078e59ad261c66b1aeb407df0745238992da976e1f69e2f6ae" }, "downloads": -1, "filename": "warcprox-2.4.17.tar.gz", "has_sig": false, "md5_digest": "46593a40e98d763ad0ef6c9211d86450", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79163, "upload_time": "2019-07-26T21:04:26", "url": "https://files.pythonhosted.org/packages/97/2a/699279920300e3e100ec017162a0cf0fe5c6a8b1fbf0328d282459061892/warcprox-2.4.17.tar.gz" } ] }