diff --git a/.coveragerc b/.coveragerc
index e9b51ab174..b5008b2b2f 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,2 +1,2 @@
[run]
-omit = requests/packages/*
\ No newline at end of file
+omit = requests/packages/*
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000000..db51a967bf
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,5 @@
+# You can configure git to automatically use this file with the following config:
+# git config --global blame.ignoreRevsFile .git-blame-ignore-revs
+
+# Add automatic code formatting to Requests
+2a6f290bc09324406708a4d404a88a45d848ddf9
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000000..ff7f10665a
--- /dev/null
+++ b/.github/CODE_OF_CONDUCT.md
@@ -0,0 +1,6 @@
+# Treat each other well
+
+Everyone participating in the _requests_ project, and in particular in the issue tracker,
+pull requests, and social media activity, is expected to treat other people with respect
+and more generally to follow the guidelines articulated in the
+[Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/).
diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md
similarity index 92%
rename from CONTRIBUTING.md
rename to .github/CONTRIBUTING.md
index 57aef1e0c7..3470dfee83 100644
--- a/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,10 +1,7 @@
# Contribution Guidelines
-Before opening any issues or proposing any pull requests, please do the
-following:
-
-1. Read our [Contributor's Guide](http://docs.python-requests.org/en/latest/dev/contributing/).
-2. Understand our [development philosophy](http://docs.python-requests.org/en/latest/dev/philosophy/).
+Before opening any issues or proposing any pull requests, please read
+our [Contributor's Guide](https://requests.readthedocs.io/en/latest/dev/contributing/).
To get the greatest chance of helpful responses, please also observe the
following additional notes.
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000000..603c7ff9c3
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+custom: ['https://www.python.org/psf/sponsorship/']
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index e23f4c70ce..060d9262a5 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -25,4 +25,4 @@ import requests
This command is only available on Requests v2.16.4 and greater. Otherwise,
please provide some basic information about your system (Python version,
-operating system, &c).
\ No newline at end of file
+operating system, &c).
diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
new file mode 100644
index 0000000000..cb87bd6b67
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -0,0 +1,36 @@
+---
+name: Bug report
+about: Create a report to help us improve
+
+---
+
+
+
+## Expected Result
+
+
+
+## Actual Result
+
+
+
+## Reproduction Steps
+
+```python
+import requests
+
+```
+
+## System Information
+
+ $ python -m requests.help
+
+```json
+{
+ "paste": "here"
+}
+```
+
+
diff --git a/.github/ISSUE_TEMPLATE/Custom.md b/.github/ISSUE_TEMPLATE/Custom.md
new file mode 100644
index 0000000000..332c3aea97
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Custom.md
@@ -0,0 +1,10 @@
+---
+name: Request for Help
+about: Guidance on using Requests.
+labels:
+- "Question/Not a bug"
+- "actions/autoclose-qa"
+
+---
+
+Please refer to our [Stack Overflow tag](https://stackoverflow.com/questions/tagged/python-requests) for guidance.
diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md
new file mode 100644
index 0000000000..544113ae1c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Feature_request.md
@@ -0,0 +1,10 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+labels:
+- "Feature Request"
+- "actions/autoclose-feat"
+
+---
+
+Requests is not accepting feature requests at this time.
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
new file mode 100644
index 0000000000..4b368617bd
--- /dev/null
+++ b/.github/SECURITY.md
@@ -0,0 +1,84 @@
+# Vulnerability Disclosure
+
+If you think you have found a potential security vulnerability in
+requests, please open a [draft Security Advisory](https://github.com/psf/requests/security/advisories/new)
+via GitHub. We will coordinate verification and next steps through
+that secure medium.
+
+If English is not your first language, please try to describe the
+problem and its impact to the best of your ability. For greater detail,
+please use your native language and we will try our best to translate it
+using online services.
+
+Please also include the code you used to find the problem and the
+shortest amount of code necessary to reproduce it.
+
+Please do not disclose this to anyone else. We will retrieve a CVE
+identifier if necessary and give you full credit under whatever name or
+alias you provide. We will only request an identifier when we have a fix
+and can publish it in a release.
+
+We will respect your privacy and will only publicize your involvement if
+you grant us permission.
+
+## Process
+
+This following information discusses the process the requests project
+follows in response to vulnerability disclosures. If you are disclosing
+a vulnerability, this section of the documentation lets you know how we
+will respond to your disclosure.
+
+### Timeline
+
+When you report an issue, one of the project members will respond to you
+within two days *at the outside*. In most cases responses will be
+faster, usually within 12 hours. This initial response will at the very
+least confirm receipt of the report.
+
+If we were able to rapidly reproduce the issue, the initial response
+will also contain confirmation of the issue. If we are not, we will
+often ask for more information about the reproduction scenario.
+
+Our goal is to have a fix for any vulnerability released within two
+weeks of the initial disclosure. This may potentially involve shipping
+an interim release that simply disables function while a more mature fix
+can be prepared, but will in the vast majority of cases mean shipping a
+complete release as soon as possible.
+
+Throughout the fix process we will keep you up to speed with how the fix
+is progressing. Once the fix is prepared, we will notify you that we
+believe we have a fix. Often we will ask you to confirm the fix resolves
+the problem in your environment, especially if we are not confident of
+our reproduction scenario.
+
+At this point, we will prepare for the release. We will obtain a CVE
+number if one is required, providing you with full credit for the
+discovery. We will also decide on a planned release date, and let you
+know when it is. This release date will *always* be on a weekday.
+
+At this point we will reach out to our major downstream packagers to
+notify them of an impending security-related patch so they can make
+arrangements. In addition, these packagers will be provided with the
+intended patch ahead of time, to ensure that they are able to promptly
+release their downstream packages. Currently the list of people we
+actively contact *ahead of a public release* is:
+
+- Python Maintenance Team, Red Hat (python-maint@redhat.com)
+- Daniele Tricoli, Debian (@eriol)
+
+We will notify these individuals at least a week ahead of our planned
+release date to ensure that they have sufficient time to prepare. If you
+believe you should be on this list, please let one of the maintainers
+know at one of the email addresses at the top of this article.
+
+On release day, we will push the patch to our public repository, along
+with an updated changelog that describes the issue and credits you. We
+will then issue a PyPI release containing the patch.
+
+At this point, we will publicise the release. This will involve mails to
+mailing lists, Tweets, and all other communication mechanisms available
+to the core team.
+
+We will also explicitly mention which commits contain the fix to make it
+easier for other distributors and users to easily patch their own
+versions of requests if upgrading is not an option.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..2be85338e3
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+version: 2
+updates:
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: weekly
+ ignore:
+ # Ignore all patch releases as we can manually
+ # upgrade if we run into a bug and need a fix.
+ - dependency-name: "*"
+ update-types: ["version-update:semver-patch"]
diff --git a/.github/workflows/close-issues.yml b/.github/workflows/close-issues.yml
new file mode 100644
index 0000000000..bedc75ea5b
--- /dev/null
+++ b/.github/workflows/close-issues.yml
@@ -0,0 +1,35 @@
+name: 'Autoclose Issues'
+
+on:
+ issues:
+ types:
+ - labeled
+
+permissions:
+ issues: write
+
+jobs:
+ close_qa:
+ if: github.event.label.name == 'actions/autoclose-qa'
+ runs-on: ubuntu-latest
+ steps:
+ - env:
+ ISSUE_URL: ${{ github.event.issue.html_url }}
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ gh issue close $ISSUE_URL \
+ --comment "As described in the template, we won't be able to answer questions on this issue tracker. Please use [Stack Overflow](https://stackoverflow.com/)" \
+ --reason completed
+ gh issue lock $ISSUE_URL --reason off_topic
+ close_feature_request:
+ if: github.event.label.name == 'actions/autoclose-feat'
+ runs-on: ubuntu-latest
+ steps:
+ - env:
+ ISSUE_URL: ${{ github.event.issue.html_url }}
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ gh issue close $ISSUE_URL \
+ --comment "As described in the template, Requests is not accepting feature requests" \
+ --reason "not planned"
+ gh issue lock $ISSUE_URL --reason off_topic
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 0000000000..7d7a3d9f88
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,73 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+name: "CodeQL"
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [main]
+ schedule:
+ - cron: '0 23 * * 0'
+
+permissions:
+ contents: read
+
+jobs:
+ analyze:
+ permissions:
+ actions: read # for github/codeql-action/init to get workflow details
+ contents: read # for actions/checkout to fetch code
+ security-events: write # for github/codeql-action/autobuild to send a status report
+ name: Analyze
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ # We must fetch at least the immediate parents so that if this is
+ # a pull request then we can checkout the head.
+ fetch-depth: 2
+
+ # If this run was triggered by a pull request event, then checkout
+ # the head of the pull request instead of the merge commit.
+ - run: git checkout HEAD^2
+ if: ${{ github.event_name == 'pull_request' }}
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
+ with:
+ languages: "python"
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 https://git.io/JvXDl
+
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000000..a4d6b1c902
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,20 @@
+name: Lint code
+
+on: [push, pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ lint:
+ runs-on: ubuntu-24.04
+ timeout-minutes: 10
+
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - name: Set up Python
+ uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
+ with:
+ python-version: "3.x"
+ - name: Run pre-commit
+ uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 # v3.0.0
diff --git a/.github/workflows/lock-issues.yml b/.github/workflows/lock-issues.yml
new file mode 100644
index 0000000000..7d5a3c6525
--- /dev/null
+++ b/.github/workflows/lock-issues.yml
@@ -0,0 +1,19 @@
+name: 'Lock Threads'
+
+on:
+ schedule:
+ - cron: '0 0 * * *'
+
+permissions:
+ issues: write
+ pull-requests: write
+
+jobs:
+ action:
+ if: github.repository_owner == 'psf'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: dessant/lock-threads@d42e5f49803f3c4e14ffee0378e31481265dda22 # v5.0.0
+ with:
+ issue-lock-inactive-days: 90
+ pr-lock-inactive-days: 90
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000000..28b28b2fb4
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,93 @@
+name: Publish to PyPI
+
+on:
+ push:
+ tags:
+ - "v*"
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ name: "Build dists"
+ runs-on: "ubuntu-latest"
+ environment:
+ name: "publish"
+ outputs:
+ hashes: ${{ steps.hash.outputs.hashes }}
+ artifact-id: ${{ steps.upload-artifact.outputs.artifact-id }}
+
+ steps:
+ - name: Harden the runner (Audit all outbound calls)
+ uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
+ with:
+ egress-policy: audit
+
+ - name: "Checkout repository"
+ uses: "actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8"
+ with:
+ persist-credentials: false
+
+ - name: "Setup Python"
+ uses: "actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c"
+ with:
+ python-version: "3.x"
+
+ - name: "Install dependencies"
+ run: python -m pip install build==0.8.0
+
+ - name: "Build dists"
+ run: |
+ SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) \
+ python -m build
+
+ - name: "Generate hashes"
+ id: hash
+ run: |
+ cd dist && echo "::set-output name=hashes::$(sha256sum * | base64 -w0)"
+
+ - name: "Upload dists"
+ uses: "actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02"
+ id: upload-artifact
+ with:
+ name: "dist"
+ path: "dist/"
+ if-no-files-found: error
+ retention-days: 5
+
+ provenance:
+ needs: [build]
+ permissions:
+ actions: read
+ contents: write
+ id-token: write # Needed to access the workflow's OIDC identity.
+ uses: "slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0"
+ with:
+ base64-subjects: "${{ needs.build.outputs.hashes }}"
+ upload-assets: true
+ compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163
+
+ publish:
+ name: "Publish"
+ if: startsWith(github.ref, 'refs/tags/')
+ needs: ["build", "provenance"]
+ permissions:
+ contents: write
+ id-token: write
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - name: Harden the runner (Audit all outbound calls)
+ uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
+ with:
+ egress-policy: audit
+
+ - name: "Download dists"
+ uses: "actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0" # v5.0.0
+ with:
+ artifact-ids: ${{ needs.build.outputs.artifact-id }}
+ path: "dist/"
+
+ - name: "Publish dists to PyPI"
+ uses: "pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e"
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
new file mode 100644
index 0000000000..b26c3d7ffa
--- /dev/null
+++ b/.github/workflows/run-tests.yml
@@ -0,0 +1,75 @@
+name: Tests
+
+on: [push, pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ timeout-minutes: 10
+ strategy:
+ fail-fast: false
+ matrix:
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14-dev", "pypy-3.10", "pypy-3.11"]
+ os: [ubuntu-22.04, macOS-latest, windows-latest]
+ # Pypy-3.11 can't install openssl-sys with rust
+ # which prevents us from testing in GHA.
+ exclude:
+ - { python-version: "pypy-3.11", os: "windows-latest" }
+
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
+ with:
+ python-version: ${{ matrix.python-version }}
+ cache: 'pip'
+ allow-prereleases: true
+ - name: Install dependencies
+ run: |
+ make
+ - name: Run tests
+ run: |
+ make ci
+
+ no_chardet:
+ name: "No Character Detection"
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
+ - name: 'Set up Python 3.9'
+ uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c
+ with:
+ python-version: '3.9'
+ - name: Install dependencies
+ run: |
+ make
+ python -m pip uninstall -y "charset_normalizer" "chardet"
+ - name: Run tests
+ run: |
+ make ci
+
+ urllib3:
+ name: 'urllib3 1.x'
+ runs-on: 'ubuntu-latest'
+ strategy:
+ fail-fast: true
+
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
+ - name: 'Set up Python 3.9'
+ uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c
+ with:
+ python-version: '3.9'
+ - name: Install dependencies
+ run: |
+ make
+ python -m pip install "urllib3<2"
+ - name: Run tests
+ run: |
+ make ci
diff --git a/.gitignore b/.gitignore
index cd0c32e95c..de61154e3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,9 +14,21 @@ requests.egg-info/
*.swp
*.egg
env/
+.venv/
+.eggs/
+.tox/
+.pytest_cache/
+.vscode/
+.eggs/
.workon
+# in case you work with IntelliJ/PyCharm
+.idea
+*.iml
+.python-version
+
+
t.py
t2.py
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000..0a0515cf87
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,28 @@
+exclude: 'docs/|ext/'
+
+repos:
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.4.0
+ hooks:
+ - id: check-yaml
+ - id: debug-statements
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
+- repo: https://github.com/PyCQA/isort
+ rev: 5.12.0
+ hooks:
+ - id: isort
+- repo: https://github.com/psf/black
+ rev: 23.7.0
+ hooks:
+ - id: black
+ exclude: tests/test_lowlevel.py
+- repo: https://github.com/asottile/pyupgrade
+ rev: v3.10.1
+ hooks:
+ - id: pyupgrade
+ args: [--py37-plus]
+- repo: https://github.com/PyCQA/flake8
+ rev: 6.1.0
+ hooks:
+ - id: flake8
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 0000000000..0e2c719e08
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,29 @@
+# Read the Docs configuration file for Sphinx projects
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+# Set the OS, Python version and other tools you might need
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.12"
+
+# Build documentation in the "docs/" directory with Sphinx
+sphinx:
+ configuration: docs/conf.py
+ builder: "dirhtml"
+
+# Optionally build your docs in additional formats such as PDF and ePub
+formats:
+ - pdf
+ - epub
+
+# Optional but recommended, declare the Python requirements required
+# to build your documentation
+# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
+python:
+ install:
+ - path: .
+ - requirements: docs/requirements.txt
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index aae4b56098..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-sudo: false
-language: python
-python:
- # - "2.6"
- - "2.7"
- - "3.4"
- - "3.5"
- - "3.6"
- - "3.7-dev"
- # - "pypy" -- appears to hang
- # - "pypy3"
-# command to install dependencies
-install: "make"
-# command to run tests
-script:
- - |
- if [[ "$TRAVIS_PYTHON_VERSION" != "2.6" ]] ; then make test-readme; fi
- - make ci
-cache: pip
-jobs:
- include:
- - stage: test
- script:
- - |
- if [[ "$TRAVIS_PYTHON_VERSION" != "2.6" ]] ; then make test-readme; fi
- - make ci
- - stage: coverage
- python: 3.6
- script: codecov
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 907687d4de..6e017c9a91 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -1,17 +1,16 @@
-Requests is written and maintained by Kenneth Reitz and
-various contributors:
+Requests was lovingly created by Kenneth Reitz.
Keepers of the Crystals
```````````````````````
-- Kenneth Reitz `@kennethreitz `_, Keeper of the Master Crystal.
-- Ian Cordasco `@sigmavirus24 `_.
-- Nate Prewitt `@nateprewitt `_.
+- Nate Prewitt `@nateprewitt `_.
+- Seth M. Larson `@sethmlarson `_.
Previous Keepers of Crystals
````````````````````````````
-
+- Kenneth Reitz `@kennethreitz `_, reluctant Keeper of the Master Crystal.
- Cory Benfield `@lukasa `_
+- Ian Cordasco `@sigmavirus24 `_.
Patches and Suggestions
@@ -125,7 +124,7 @@ Patches and Suggestions
- Bryce Boe (`@bboe `_)
- Colin Dunklau (`@cdunklau `_)
- Bob Carroll (`@rcarz `_)
-- Hugo Osvaldo Barrera (`@hobarrera `_)
+- Hugo Osvaldo Barrera (`@hobarrera `_)
- Łukasz Langa
- Dave Shawley
- James Clarke (`@jam `_)
@@ -187,3 +186,10 @@ Patches and Suggestions
- Nehal J Wani (`@nehaljwani `_)
- Demetrios Bairaktaris (`@DemetriosBairaktaris `_)
- Darren Dormer (`@ddormer `_)
+- Rajiv Mayani (`@mayani `_)
+- Antti Kaihola (`@akaihola `_)
+- "Dull Bananas" (`@dullbananas `_)
+- Alessio Izzo (`@aless10 `_)
+- Sylvain Marié (`@smarie `_)
+- Hod Bin Noon (`@hodbn `_)
+- Mike Fiedler (`@miketheman `_)
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index 9b170d2fb1..0000000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Be cordial or be on your way.
-
-https://www.kennethreitz.org/essays/be-cordial-or-be-on-your-way
diff --git a/HISTORY.md b/HISTORY.md
new file mode 100644
index 0000000000..3828073adf
--- /dev/null
+++ b/HISTORY.md
@@ -0,0 +1,2012 @@
+Release History
+===============
+
+dev
+---
+
+- \[Short description of non-trivial change.\]
+
+2.32.5 (2025-08-18)
+-------------------
+
+**Bugfixes**
+
+- The SSLContext caching feature originally introduced in 2.32.0 has created
+ a new class of issues in Requests that have had negative impact across a number
+ of use cases. The Requests team has decided to revert this feature as long term
+ maintenance of it is proving to be unsustainable in its current iteration.
+
+**Deprecations**
+- Added support for Python 3.14.
+- Dropped support for Python 3.8 following its end of support.
+
+2.32.4 (2025-06-10)
+-------------------
+
+**Security**
+- CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted
+ environment will retrieve credentials for the wrong hostname/machine from a
+ netrc file.
+
+**Improvements**
+- Numerous documentation improvements
+
+**Deprecations**
+- Added support for pypy 3.11 for Linux and macOS.
+- Dropped support for pypy 3.9 following its end of support.
+
+
+2.32.3 (2024-05-29)
+-------------------
+
+**Bugfixes**
+- Fixed bug breaking the ability to specify custom SSLContexts in sub-classes of
+ HTTPAdapter. (#6716)
+- Fixed issue where Requests started failing to run on Python versions compiled
+ without the `ssl` module. (#6724)
+
+2.32.2 (2024-05-21)
+-------------------
+
+**Deprecations**
+- To provide a more stable migration for custom HTTPAdapters impacted
+ by the CVE changes in 2.32.0, we've renamed `_get_connection` to
+ a new public API, `get_connection_with_tls_context`. Existing custom
+ HTTPAdapters will need to migrate their code to use this new API.
+ `get_connection` is considered deprecated in all versions of Requests>=2.32.0.
+
+ A minimal (2-line) example has been provided in the linked PR to ease
+ migration, but we strongly urge users to evaluate if their custom adapter
+ is subject to the same issue described in CVE-2024-35195. (#6710)
+
+2.32.1 (2024-05-20)
+-------------------
+
+**Bugfixes**
+- Add missing test certs to the sdist distributed on PyPI.
+
+
+2.32.0 (2024-05-20)
+-------------------
+
+**Security**
+- Fixed an issue where setting `verify=False` on the first request from a
+ Session will cause subsequent requests to the _same origin_ to also ignore
+ cert verification, regardless of the value of `verify`.
+ (https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56)
+
+**Improvements**
+- `verify=True` now reuses a global SSLContext which should improve
+ request time variance between first and subsequent requests. It should
+ also minimize certificate load time on Windows systems when using a Python
+ version built with OpenSSL 3.x. (#6667)
+- Requests now supports optional use of character detection
+ (`chardet` or `charset_normalizer`) when repackaged or vendored.
+ This enables `pip` and other projects to minimize their vendoring
+ surface area. The `Response.text()` and `apparent_encoding` APIs
+ will default to `utf-8` if neither library is present. (#6702)
+
+**Bugfixes**
+- Fixed bug in length detection where emoji length was incorrectly
+ calculated in the request content-length. (#6589)
+- Fixed deserialization bug in JSONDecodeError. (#6629)
+- Fixed bug where an extra leading `/` (path separator) could lead
+ urllib3 to unnecessarily reparse the request URI. (#6644)
+
+**Deprecations**
+
+- Requests has officially added support for CPython 3.12 (#6503)
+- Requests has officially added support for PyPy 3.9 and 3.10 (#6641)
+- Requests has officially dropped support for CPython 3.7 (#6642)
+- Requests has officially dropped support for PyPy 3.7 and 3.8 (#6641)
+
+**Documentation**
+- Various typo fixes and doc improvements.
+
+**Packaging**
+- Requests has started adopting some modern packaging practices.
+ The source files for the projects (formerly `requests`) is now located
+ in `src/requests` in the Requests sdist. (#6506)
+- Starting in Requests 2.33.0, Requests will migrate to a PEP 517 build system
+ using `hatchling`. This should not impact the average user, but extremely old
+ versions of packaging utilities may have issues with the new packaging format.
+
+
+2.31.0 (2023-05-22)
+-------------------
+
+**Security**
+- Versions of Requests between v2.3.0 and v2.30.0 are vulnerable to potential
+ forwarding of `Proxy-Authorization` headers to destination servers when
+ following HTTPS redirects.
+
+ When proxies are defined with user info (`https://user:pass@proxy:8080`), Requests
+ will construct a `Proxy-Authorization` header that is attached to the request to
+ authenticate with the proxy.
+
+ In cases where Requests receives a redirect response, it previously reattached
+ the `Proxy-Authorization` header incorrectly, resulting in the value being
+ sent through the tunneled connection to the destination server. Users who rely on
+ defining their proxy credentials in the URL are *strongly* encouraged to upgrade
+ to Requests 2.31.0+ to prevent unintentional leakage and rotate their proxy
+ credentials once the change has been fully deployed.
+
+ Users who do not use a proxy or do not supply their proxy credentials through
+ the user information portion of their proxy URL are not subject to this
+ vulnerability.
+
+ Full details can be read in our [Github Security Advisory](https://github.com/psf/requests/security/advisories/GHSA-j8r2-6x86-q33q)
+ and [CVE-2023-32681](https://nvd.nist.gov/vuln/detail/CVE-2023-32681).
+
+
+2.30.0 (2023-05-03)
+-------------------
+
+**Dependencies**
+- ⚠️ Added support for urllib3 2.0. ⚠️
+
+ This may contain minor breaking changes so we advise careful testing and
+ reviewing https://urllib3.readthedocs.io/en/latest/v2-migration-guide.html
+ prior to upgrading.
+
+ Users who wish to stay on urllib3 1.x can pin to `urllib3<2`.
+
+2.29.0 (2023-04-26)
+-------------------
+
+**Improvements**
+
+- Requests now defers chunked requests to the urllib3 implementation to improve
+ standardization. (#6226)
+- Requests relaxes header component requirements to support bytes/str subclasses. (#6356)
+
+2.28.2 (2023-01-12)
+-------------------
+
+**Dependencies**
+
+- Requests now supports charset\_normalizer 3.x. (#6261)
+
+**Bugfixes**
+
+- Updated MissingSchema exception to suggest https scheme rather than http. (#6188)
+
+2.28.1 (2022-06-29)
+-------------------
+
+**Improvements**
+
+- Speed optimization in `iter_content` with transition to `yield from`. (#6170)
+
+**Dependencies**
+
+- Added support for chardet 5.0.0 (#6179)
+- Added support for charset-normalizer 2.1.0 (#6169)
+
+2.28.0 (2022-06-09)
+-------------------
+
+**Deprecations**
+
+- ⚠️ Requests has officially dropped support for Python 2.7. ⚠️ (#6091)
+- Requests has officially dropped support for Python 3.6 (including pypy3.6). (#6091)
+
+**Improvements**
+
+- Wrap JSON parsing issues in Request's JSONDecodeError for payloads without
+ an encoding to make `json()` API consistent. (#6097)
+- Parse header components consistently, raising an InvalidHeader error in
+ all invalid cases. (#6154)
+- Added provisional 3.11 support with current beta build. (#6155)
+- Requests got a makeover and we decided to paint it black. (#6095)
+
+**Bugfixes**
+
+- Fixed bug where setting `CURL_CA_BUNDLE` to an empty string would disable
+ cert verification. All Requests 2.x versions before 2.28.0 are affected. (#6074)
+- Fixed urllib3 exception leak, wrapping `urllib3.exceptions.SSLError` with
+ `requests.exceptions.SSLError` for `content` and `iter_content`. (#6057)
+- Fixed issue where invalid Windows registry entries caused proxy resolution
+ to raise an exception rather than ignoring the entry. (#6149)
+- Fixed issue where entire payload could be included in the error message for
+ JSONDecodeError. (#6036)
+
+2.27.1 (2022-01-05)
+-------------------
+
+**Bugfixes**
+
+- Fixed parsing issue that resulted in the `auth` component being
+ dropped from proxy URLs. (#6028)
+
+2.27.0 (2022-01-03)
+-------------------
+
+**Improvements**
+
+- Officially added support for Python 3.10. (#5928)
+
+- Added a `requests.exceptions.JSONDecodeError` to unify JSON exceptions between
+ Python 2 and 3. This gets raised in the `response.json()` method, and is
+ backwards compatible as it inherits from previously thrown exceptions.
+ Can be caught from `requests.exceptions.RequestException` as well. (#5856)
+
+- Improved error text for misnamed `InvalidSchema` and `MissingSchema`
+ exceptions. This is a temporary fix until exceptions can be renamed
+ (Schema->Scheme). (#6017)
+
+- Improved proxy parsing for proxy URLs missing a scheme. This will address
+ recent changes to `urlparse` in Python 3.9+. (#5917)
+
+**Bugfixes**
+
+- Fixed defect in `extract_zipped_paths` which could result in an infinite loop
+ for some paths. (#5851)
+
+- Fixed handling for `AttributeError` when calculating length of files obtained
+ by `Tarfile.extractfile()`. (#5239)
+
+- Fixed urllib3 exception leak, wrapping `urllib3.exceptions.InvalidHeader` with
+ `requests.exceptions.InvalidHeader`. (#5914)
+
+- Fixed bug where two Host headers were sent for chunked requests. (#5391)
+
+- Fixed regression in Requests 2.26.0 where `Proxy-Authorization` was
+ incorrectly stripped from all requests sent with `Session.send`. (#5924)
+
+- Fixed performance regression in 2.26.0 for hosts with a large number of
+ proxies available in the environment. (#5924)
+
+- Fixed idna exception leak, wrapping `UnicodeError` with
+ `requests.exceptions.InvalidURL` for URLs with a leading dot (.) in the
+ domain. (#5414)
+
+**Deprecations**
+
+- Requests support for Python 2.7 and 3.6 will be ending in 2022. While we
+ don't have exact dates, Requests 2.27.x is likely to be the last release
+ series providing support.
+
+2.26.0 (2021-07-13)
+-------------------
+
+**Improvements**
+
+- Requests now supports Brotli compression, if either the `brotli` or
+ `brotlicffi` package is installed. (#5783)
+
+- `Session.send` now correctly resolves proxy configurations from both
+ the Session and Request. Behavior now matches `Session.request`. (#5681)
+
+**Bugfixes**
+
+- Fixed a race condition in zip extraction when using Requests in parallel
+ from zip archive. (#5707)
+
+**Dependencies**
+
+- Instead of `chardet`, use the MIT-licensed `charset_normalizer` for Python3
+ to remove license ambiguity for projects bundling requests. If `chardet`
+ is already installed on your machine it will be used instead of `charset_normalizer`
+ to keep backwards compatibility. (#5797)
+
+ You can also install `chardet` while installing requests by
+ specifying `[use_chardet_on_py3]` extra as follows:
+
+ ```shell
+ pip install "requests[use_chardet_on_py3]"
+ ```
+
+ Python2 still depends upon the `chardet` module.
+
+- Requests now supports `idna` 3.x on Python 3. `idna` 2.x will continue to
+ be used on Python 2 installations. (#5711)
+
+**Deprecations**
+
+- The `requests[security]` extra has been converted to a no-op install.
+ PyOpenSSL is no longer the recommended secure option for Requests. (#5867)
+
+- Requests has officially dropped support for Python 3.5. (#5867)
+
+2.25.1 (2020-12-16)
+-------------------
+
+**Bugfixes**
+
+- Requests now treats `application/json` as `utf8` by default. Resolving
+ inconsistencies between `r.text` and `r.json` output. (#5673)
+
+**Dependencies**
+
+- Requests now supports chardet v4.x.
+
+2.25.0 (2020-11-11)
+-------------------
+
+**Improvements**
+
+- Added support for NETRC environment variable. (#5643)
+
+**Dependencies**
+
+- Requests now supports urllib3 v1.26.
+
+**Deprecations**
+
+- Requests v2.25.x will be the last release series with support for Python 3.5.
+- The `requests[security]` extra is officially deprecated and will be removed
+ in Requests v2.26.0.
+
+2.24.0 (2020-06-17)
+-------------------
+
+**Improvements**
+
+- pyOpenSSL TLS implementation is now only used if Python
+ either doesn't have an `ssl` module or doesn't support
+ SNI. Previously pyOpenSSL was unconditionally used if available.
+ This applies even if pyOpenSSL is installed via the
+ `requests[security]` extra (#5443)
+
+- Redirect resolution should now only occur when
+ `allow_redirects` is True. (#5492)
+
+- No longer perform unnecessary Content-Length calculation for
+ requests that won't use it. (#5496)
+
+2.23.0 (2020-02-19)
+-------------------
+
+**Improvements**
+
+- Remove defunct reference to `prefetch` in Session `__attrs__` (#5110)
+
+**Bugfixes**
+
+- Requests no longer outputs password in basic auth usage warning. (#5099)
+
+**Dependencies**
+
+- Pinning for `chardet` and `idna` now uses major version instead of minor.
+ This hopefully reduces the need for releases every time a dependency is updated.
+
+2.22.0 (2019-05-15)
+-------------------
+
+**Dependencies**
+
+- Requests now supports urllib3 v1.25.2.
+ (note: 1.25.0 and 1.25.1 are incompatible)
+
+**Deprecations**
+
+- Requests has officially stopped support for Python 3.4.
+
+2.21.0 (2018-12-10)
+-------------------
+
+**Dependencies**
+
+- Requests now supports idna v2.8.
+
+2.20.1 (2018-11-08)
+-------------------
+
+**Bugfixes**
+
+- Fixed bug with unintended Authorization header stripping for
+ redirects using default ports (http/80, https/443).
+
+2.20.0 (2018-10-18)
+-------------------
+
+**Bugfixes**
+
+- Content-Type header parsing is now case-insensitive (e.g.
+ charset=utf8 v Charset=utf8).
+- Fixed exception leak where certain redirect urls would raise
+ uncaught urllib3 exceptions.
+- Requests removes Authorization header from requests redirected
+ from https to http on the same hostname. (CVE-2018-18074)
+- `should_bypass_proxies` now handles URIs without hostnames (e.g.
+ files).
+
+**Dependencies**
+
+- Requests now supports urllib3 v1.24.
+
+**Deprecations**
+
+- Requests has officially stopped support for Python 2.6.
+
+2.19.1 (2018-06-14)
+-------------------
+
+**Bugfixes**
+
+- Fixed issue where status\_codes.py's `init` function failed trying
+ to append to a `__doc__` value of `None`.
+
+2.19.0 (2018-06-12)
+-------------------
+
+**Improvements**
+
+- Warn user about possible slowdown when using cryptography version
+ < 1.3.4
+- Check for invalid host in proxy URL, before forwarding request to
+ adapter.
+- Fragments are now properly maintained across redirects. (RFC7231
+ 7.1.2)
+- Removed use of cgi module to expedite library load time.
+- Added support for SHA-256 and SHA-512 digest auth algorithms.
+- Minor performance improvement to `Request.content`.
+- Migrate to using collections.abc for 3.7 compatibility.
+
+**Bugfixes**
+
+- Parsing empty `Link` headers with `parse_header_links()` no longer
+ return one bogus entry.
+- Fixed issue where loading the default certificate bundle from a zip
+ archive would raise an `IOError`.
+- Fixed issue with unexpected `ImportError` on windows system which do
+ not support `winreg` module.
+- DNS resolution in proxy bypass no longer includes the username and
+ password in the request. This also fixes the issue of DNS queries
+ failing on macOS.
+- Properly normalize adapter prefixes for url comparison.
+- Passing `None` as a file pointer to the `files` param no longer
+ raises an exception.
+- Calling `copy` on a `RequestsCookieJar` will now preserve the cookie
+ policy correctly.
+
+**Dependencies**
+
+- We now support idna v2.7.
+- We now support urllib3 v1.23.
+
+2.18.4 (2017-08-15)
+-------------------
+
+**Improvements**
+
+- Error messages for invalid headers now include the header name for
+ easier debugging
+
+**Dependencies**
+
+- We now support idna v2.6.
+
+2.18.3 (2017-08-02)
+-------------------
+
+**Improvements**
+
+- Running `$ python -m requests.help` now includes the installed
+ version of idna.
+
+**Bugfixes**
+
+- Fixed issue where Requests would raise `ConnectionError` instead of
+ `SSLError` when encountering SSL problems when using urllib3 v1.22.
+
+2.18.2 (2017-07-25)
+-------------------
+
+**Bugfixes**
+
+- `requests.help` no longer fails on Python 2.6 due to the absence of
+ `ssl.OPENSSL_VERSION_NUMBER`.
+
+**Dependencies**
+
+- We now support urllib3 v1.22.
+
+2.18.1 (2017-06-14)
+-------------------
+
+**Bugfixes**
+
+- Fix an error in the packaging whereby the `*.whl` contained
+ incorrect data that regressed the fix in v2.17.3.
+
+2.18.0 (2017-06-14)
+-------------------
+
+**Improvements**
+
+- `Response` is now a context manager, so can be used directly in a
+ `with` statement without first having to be wrapped by
+ `contextlib.closing()`.
+
+**Bugfixes**
+
+- Resolve installation failure if multiprocessing is not available
+- Resolve tests crash if multiprocessing is not able to determine the
+ number of CPU cores
+- Resolve error swallowing in utils set\_environ generator
+
+2.17.3 (2017-05-29)
+-------------------
+
+**Improvements**
+
+- Improved `packages` namespace identity support, for monkeypatching
+ libraries.
+
+2.17.2 (2017-05-29)
+-------------------
+
+**Improvements**
+
+- Improved `packages` namespace identity support, for monkeypatching
+ libraries.
+
+2.17.1 (2017-05-29)
+-------------------
+
+**Improvements**
+
+- Improved `packages` namespace identity support, for monkeypatching
+ libraries.
+
+2.17.0 (2017-05-29)
+-------------------
+
+**Improvements**
+
+- Removal of the 301 redirect cache. This improves thread-safety.
+
+2.16.5 (2017-05-28)
+-------------------
+
+- Improvements to `$ python -m requests.help`.
+
+2.16.4 (2017-05-27)
+-------------------
+
+- Introduction of the `$ python -m requests.help` command, for
+ debugging with maintainers!
+
+2.16.3 (2017-05-27)
+-------------------
+
+- Further restored the `requests.packages` namespace for compatibility
+ reasons.
+
+2.16.2 (2017-05-27)
+-------------------
+
+- Further restored the `requests.packages` namespace for compatibility
+ reasons.
+
+No code modification (noted below) should be necessary any longer.
+
+2.16.1 (2017-05-27)
+-------------------
+
+- Restored the `requests.packages` namespace for compatibility
+ reasons.
+- Bugfix for `urllib3` version parsing.
+
+**Note**: code that was written to import against the
+`requests.packages` namespace previously will have to import code that
+rests at this module-level now.
+
+For example:
+
+ from requests.packages.urllib3.poolmanager import PoolManager
+
+Will need to be re-written to be:
+
+ from requests.packages import urllib3
+ urllib3.poolmanager.PoolManager
+
+Or, even better:
+
+ from urllib3.poolmanager import PoolManager
+
+2.16.0 (2017-05-26)
+-------------------
+
+- Unvendor ALL the things!
+
+2.15.1 (2017-05-26)
+-------------------
+
+- Everyone makes mistakes.
+
+2.15.0 (2017-05-26)
+-------------------
+
+**Improvements**
+
+- Introduction of the `Response.next` property, for getting the next
+ `PreparedResponse` from a redirect chain (when
+ `allow_redirects=False`).
+- Internal refactoring of `__version__` module.
+
+**Bugfixes**
+
+- Restored once-optional parameter for
+ `requests.utils.get_environ_proxies()`.
+
+2.14.2 (2017-05-10)
+-------------------
+
+**Bugfixes**
+
+- Changed a less-than to an equal-to and an or in the dependency
+ markers to widen compatibility with older setuptools releases.
+
+2.14.1 (2017-05-09)
+-------------------
+
+**Bugfixes**
+
+- Changed the dependency markers to widen compatibility with older pip
+ releases.
+
+2.14.0 (2017-05-09)
+-------------------
+
+**Improvements**
+
+- It is now possible to pass `no_proxy` as a key to the `proxies`
+ dictionary to provide handling similar to the `NO_PROXY` environment
+ variable.
+- When users provide invalid paths to certificate bundle files or
+ directories Requests now raises `IOError`, rather than failing at
+ the time of the HTTPS request with a fairly inscrutable certificate
+ validation error.
+- The behavior of `SessionRedirectMixin` was slightly altered.
+ `resolve_redirects` will now detect a redirect by calling
+ `get_redirect_target(response)` instead of directly querying
+ `Response.is_redirect` and `Response.headers['location']`. Advanced
+ users will be able to process malformed redirects more easily.
+- Changed the internal calculation of elapsed request time to have
+ higher resolution on Windows.
+- Added `win_inet_pton` as conditional dependency for the `[socks]`
+ extra on Windows with Python 2.7.
+- Changed the proxy bypass implementation on Windows: the proxy bypass
+ check doesn't use forward and reverse DNS requests anymore
+- URLs with schemes that begin with `http` but are not `http` or
+ `https` no longer have their host parts forced to lowercase.
+
+**Bugfixes**
+
+- Much improved handling of non-ASCII `Location` header values in
+ redirects. Fewer `UnicodeDecodeErrors` are encountered on Python 2,
+ and Python 3 now correctly understands that Latin-1 is unlikely to
+ be the correct encoding.
+- If an attempt to `seek` file to find out its length fails, we now
+ appropriately handle that by aborting our content-length
+ calculations.
+- Restricted `HTTPDigestAuth` to only respond to auth challenges made
+ on 4XX responses, rather than to all auth challenges.
+- Fixed some code that was firing `DeprecationWarning` on Python 3.6.
+- The dismayed person emoticon (`/o\\`) no longer has a big head. I'm
+ sure this is what you were all worrying about most.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to v1.21.1.
+- Updated bundled chardet to v3.0.2.
+- Updated bundled idna to v2.5.
+- Updated bundled certifi to 2017.4.17.
+
+2.13.0 (2017-01-24)
+-------------------
+
+**Features**
+
+- Only load the `idna` library when we've determined we need it. This
+ will save some memory for users.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.20.
+- Updated bundled idna to 2.2.
+
+2.12.5 (2017-01-18)
+-------------------
+
+**Bugfixes**
+
+- Fixed an issue with JSON encoding detection, specifically detecting
+ big-endian UTF-32 with BOM.
+
+2.12.4 (2016-12-14)
+-------------------
+
+**Bugfixes**
+
+- Fixed regression from 2.12.2 where non-string types were rejected in
+ the basic auth parameters. While support for this behaviour has been
+ re-added, the behaviour is deprecated and will be removed in the
+ future.
+
+2.12.3 (2016-12-01)
+-------------------
+
+**Bugfixes**
+
+- Fixed regression from v2.12.1 for URLs with schemes that begin with
+ "http". These URLs have historically been processed as though they
+ were HTTP-schemed URLs, and so have had parameters added. This was
+ removed in v2.12.2 in an overzealous attempt to resolve problems
+ with IDNA-encoding those URLs. This change was reverted: the other
+ fixes for IDNA-encoding have been judged to be sufficient to return
+ to the behaviour Requests had before v2.12.0.
+
+2.12.2 (2016-11-30)
+-------------------
+
+**Bugfixes**
+
+- Fixed several issues with IDNA-encoding URLs that are technically
+ invalid but which are widely accepted. Requests will now attempt to
+ IDNA-encode a URL if it can but, if it fails, and the host contains
+ only ASCII characters, it will be passed through optimistically.
+ This will allow users to opt-in to using IDNA2003 themselves if they
+ want to, and will also allow technically invalid but still common
+ hostnames.
+- Fixed an issue where URLs with leading whitespace would raise
+ `InvalidSchema` errors.
+- Fixed an issue where some URLs without the HTTP or HTTPS schemes
+ would still have HTTP URL preparation applied to them.
+- Fixed an issue where Unicode strings could not be used in basic
+ auth.
+- Fixed an issue encountered by some Requests plugins where
+ constructing a Response object would cause `Response.content` to
+ raise an `AttributeError`.
+
+2.12.1 (2016-11-16)
+-------------------
+
+**Bugfixes**
+
+- Updated setuptools 'security' extra for the new PyOpenSSL backend in
+ urllib3.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.19.1.
+
+2.12.0 (2016-11-15)
+-------------------
+
+**Improvements**
+
+- Updated support for internationalized domain names from IDNA2003 to
+ IDNA2008. This updated support is required for several forms of IDNs
+ and is mandatory for .de domains.
+- Much improved heuristics for guessing content lengths: Requests will
+ no longer read an entire `StringIO` into memory.
+- Much improved logic for recalculating `Content-Length` headers for
+ `PreparedRequest` objects.
+- Improved tolerance for file-like objects that have no `tell` method
+ but do have a `seek` method.
+- Anything that is a subclass of `Mapping` is now treated like a
+ dictionary by the `data=` keyword argument.
+- Requests now tolerates empty passwords in proxy credentials, rather
+ than stripping the credentials.
+- If a request is made with a file-like object as the body and that
+ request is redirected with a 307 or 308 status code, Requests will
+ now attempt to rewind the body object so it can be replayed.
+
+**Bugfixes**
+
+- When calling `response.close`, the call to `close` will be
+ propagated through to non-urllib3 backends.
+- Fixed issue where the `ALL_PROXY` environment variable would be
+ preferred over scheme-specific variables like `HTTP_PROXY`.
+- Fixed issue where non-UTF8 reason phrases got severely mangled by
+ falling back to decoding using ISO 8859-1 instead.
+- Fixed a bug where Requests would not correctly correlate cookies set
+ when using custom Host headers if those Host headers did not use the
+ native string type for the platform.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.19.
+- Updated bundled certifi certs to 2016.09.26.
+
+2.11.1 (2016-08-17)
+-------------------
+
+**Bugfixes**
+
+- Fixed a bug when using `iter_content` with `decode_unicode=True` for
+ streamed bodies would raise `AttributeError`. This bug was
+ introduced in 2.11.
+- Strip Content-Type and Transfer-Encoding headers from the header
+ block when following a redirect that transforms the verb from
+ POST/PUT to GET.
+
+2.11.0 (2016-08-08)
+-------------------
+
+**Improvements**
+
+- Added support for the `ALL_PROXY` environment variable.
+- Reject header values that contain leading whitespace or newline
+ characters to reduce risk of header smuggling.
+
+**Bugfixes**
+
+- Fixed occasional `TypeError` when attempting to decode a JSON
+ response that occurred in an error case. Now correctly returns a
+ `ValueError`.
+- Requests would incorrectly ignore a non-CIDR IP address in the
+ `NO_PROXY` environment variables: Requests now treats it as a
+ specific IP.
+- Fixed a bug when sending JSON data that could cause us to encounter
+ obscure OpenSSL errors in certain network conditions (yes, really).
+- Added type checks to ensure that `iter_content` only accepts
+ integers and `None` for chunk sizes.
+- Fixed issue where responses whose body had not been fully consumed
+ would have the underlying connection closed but not returned to the
+ connection pool, which could cause Requests to hang in situations
+ where the `HTTPAdapter` had been configured to use a blocking
+ connection pool.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.16.
+- Some previous releases accidentally accepted non-strings as
+ acceptable header values. This release does not.
+
+2.10.0 (2016-04-29)
+-------------------
+
+**New Features**
+
+- SOCKS Proxy Support! (requires PySocks;
+ `$ pip install requests[socks]`)
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.15.1.
+
+2.9.2 (2016-04-29)
+------------------
+
+**Improvements**
+
+- Change built-in CaseInsensitiveDict (used for headers) to use
+ OrderedDict as its underlying datastore.
+
+**Bugfixes**
+
+- Don't use redirect\_cache if allow\_redirects=False
+- When passed objects that throw exceptions from `tell()`, send them
+ via chunked transfer encoding instead of failing.
+- Raise a ProxyError for proxy related connection issues.
+
+2.9.1 (2015-12-21)
+------------------
+
+**Bugfixes**
+
+- Resolve regression introduced in 2.9.0 that made it impossible to
+ send binary strings as bodies in Python 3.
+- Fixed errors when calculating cookie expiration dates in certain
+ locales.
+
+**Miscellaneous**
+
+- Updated bundled urllib3 to 1.13.1.
+
+2.9.0 (2015-12-15)
+------------------
+
+**Minor Improvements** (Backwards compatible)
+
+- The `verify` keyword argument now supports being passed a path to a
+ directory of CA certificates, not just a single-file bundle.
+- Warnings are now emitted when sending files opened in text mode.
+- Added the 511 Network Authentication Required status code to the
+ status code registry.
+
+**Bugfixes**
+
+- For file-like objects that are not sought to the very beginning, we
+ now send the content length for the number of bytes we will actually
+ read, rather than the total size of the file, allowing partial file
+ uploads.
+- When uploading file-like objects, if they are empty or have no
+ obvious content length we set `Transfer-Encoding: chunked` rather
+ than `Content-Length: 0`.
+- We correctly receive the response in buffered mode when uploading
+ chunked bodies.
+- We now handle being passed a query string as a bytestring on Python
+ 3, by decoding it as UTF-8.
+- Sessions are now closed in all cases (exceptional and not) when
+ using the functional API rather than leaking and waiting for the
+ garbage collector to clean them up.
+- Correctly handle digest auth headers with a malformed `qop`
+ directive that contains no token, by treating it the same as if no
+ `qop` directive was provided at all.
+- Minor performance improvements when removing specific cookies by
+ name.
+
+**Miscellaneous**
+
+- Updated urllib3 to 1.13.
+
+2.8.1 (2015-10-13)
+------------------
+
+**Bugfixes**
+
+- Update certificate bundle to match `certifi` 2015.9.6.2's weak
+ certificate bundle.
+- Fix a bug in 2.8.0 where requests would raise `ConnectTimeout`
+ instead of `ConnectionError`
+- When using the PreparedRequest flow, requests will now correctly
+ respect the `json` parameter. Broken in 2.8.0.
+- When using the PreparedRequest flow, requests will now correctly
+ handle a Unicode-string method name on Python 2. Broken in 2.8.0.
+
+2.8.0 (2015-10-05)
+------------------
+
+**Minor Improvements** (Backwards Compatible)
+
+- Requests now supports per-host proxies. This allows the `proxies`
+ dictionary to have entries of the form
+ `{'://': ''}`. Host-specific proxies will
+ be used in preference to the previously-supported scheme-specific
+ ones, but the previous syntax will continue to work.
+- `Response.raise_for_status` now prints the URL that failed as part
+ of the exception message.
+- `requests.utils.get_netrc_auth` now takes an `raise_errors` kwarg,
+ defaulting to `False`. When `True`, errors parsing `.netrc` files
+ cause exceptions to be thrown.
+- Change to bundled projects import logic to make it easier to
+ unbundle requests downstream.
+- Changed the default User-Agent string to avoid leaking data on
+ Linux: now contains only the requests version.
+
+**Bugfixes**
+
+- The `json` parameter to `post()` and friends will now only be used
+ if neither `data` nor `files` are present, consistent with the
+ documentation.
+- We now ignore empty fields in the `NO_PROXY` environment variable.
+- Fixed problem where `httplib.BadStatusLine` would get raised if
+ combining `stream=True` with `contextlib.closing`.
+- Prevented bugs where we would attempt to return the same connection
+ back to the connection pool twice when sending a Chunked body.
+- Miscellaneous minor internal changes.
+- Digest Auth support is now thread safe.
+
+**Updates**
+
+- Updated urllib3 to 1.12.
+
+2.7.0 (2015-05-03)
+------------------
+
+This is the first release that follows our new release process. For
+more, see [our
+documentation](https://requests.readthedocs.io/en/latest/community/release-process/).
+
+**Bugfixes**
+
+- Updated urllib3 to 1.10.4, resolving several bugs involving chunked
+ transfer encoding and response framing.
+
+2.6.2 (2015-04-23)
+------------------
+
+**Bugfixes**
+
+- Fix regression where compressed data that was sent as chunked data
+ was not properly decompressed. (\#2561)
+
+2.6.1 (2015-04-22)
+------------------
+
+**Bugfixes**
+
+- Remove VendorAlias import machinery introduced in v2.5.2.
+- Simplify the PreparedRequest.prepare API: We no longer require the
+ user to pass an empty list to the hooks keyword argument. (c.f.
+ \#2552)
+- Resolve redirects now receives and forwards all of the original
+ arguments to the adapter. (\#2503)
+- Handle UnicodeDecodeErrors when trying to deal with a unicode URL
+ that cannot be encoded in ASCII. (\#2540)
+- Populate the parsed path of the URI field when performing Digest
+ Authentication. (\#2426)
+- Copy a PreparedRequest's CookieJar more reliably when it is not an
+ instance of RequestsCookieJar. (\#2527)
+
+2.6.0 (2015-03-14)
+------------------
+
+**Bugfixes**
+
+- CVE-2015-2296: Fix handling of cookies on redirect. Previously a
+ cookie without a host value set would use the hostname for the
+ redirected URL exposing requests users to session fixation attacks
+ and potentially cookie stealing. This was disclosed privately by
+ Matthew Daley of [BugFuzz](https://bugfuzz.com). This affects all
+ versions of requests from v2.1.0 to v2.5.3 (inclusive on both ends).
+- Fix error when requests is an `install_requires` dependency and
+ `python setup.py test` is run. (\#2462)
+- Fix error when urllib3 is unbundled and requests continues to use
+ the vendored import location.
+- Include fixes to `urllib3`'s header handling.
+- Requests' handling of unvendored dependencies is now more
+ restrictive.
+
+**Features and Improvements**
+
+- Support bytearrays when passed as parameters in the `files`
+ argument. (\#2468)
+- Avoid data duplication when creating a request with `str`, `bytes`,
+ or `bytearray` input to the `files` argument.
+
+2.5.3 (2015-02-24)
+------------------
+
+**Bugfixes**
+
+- Revert changes to our vendored certificate bundle. For more context
+ see (\#2455, \#2456, and )
+
+2.5.2 (2015-02-23)
+------------------
+
+**Features and Improvements**
+
+- Add sha256 fingerprint support.
+ ([shazow/urllib3\#540](https://github.com/shazow/urllib3/pull/540))
+- Improve the performance of headers.
+ ([shazow/urllib3\#544](https://github.com/shazow/urllib3/pull/544))
+
+**Bugfixes**
+
+- Copy pip's import machinery. When downstream redistributors remove
+ requests.packages.urllib3 the import machinery will continue to let
+ those same symbols work. Example usage in requests' documentation
+ and 3rd-party libraries relying on the vendored copies of urllib3
+ will work without having to fallback to the system urllib3.
+- Attempt to quote parts of the URL on redirect if unquoting and then
+ quoting fails. (\#2356)
+- Fix filename type check for multipart form-data uploads. (\#2411)
+- Properly handle the case where a server issuing digest
+ authentication challenges provides both auth and auth-int
+ qop-values. (\#2408)
+- Fix a socket leak.
+ ([shazow/urllib3\#549](https://github.com/shazow/urllib3/pull/549))
+- Fix multiple `Set-Cookie` headers properly.
+ ([shazow/urllib3\#534](https://github.com/shazow/urllib3/pull/534))
+- Disable the built-in hostname verification.
+ ([shazow/urllib3\#526](https://github.com/shazow/urllib3/pull/526))
+- Fix the behaviour of decoding an exhausted stream.
+ ([shazow/urllib3\#535](https://github.com/shazow/urllib3/pull/535))
+
+**Security**
+
+- Pulled in an updated `cacert.pem`.
+- Drop RC4 from the default cipher list.
+ ([shazow/urllib3\#551](https://github.com/shazow/urllib3/pull/551))
+
+2.5.1 (2014-12-23)
+------------------
+
+**Behavioural Changes**
+
+- Only catch HTTPErrors in raise\_for\_status (\#2382)
+
+**Bugfixes**
+
+- Handle LocationParseError from urllib3 (\#2344)
+- Handle file-like object filenames that are not strings (\#2379)
+- Unbreak HTTPDigestAuth handler. Allow new nonces to be negotiated
+ (\#2389)
+
+2.5.0 (2014-12-01)
+------------------
+
+**Improvements**
+
+- Allow usage of urllib3's Retry object with HTTPAdapters (\#2216)
+- The `iter_lines` method on a response now accepts a delimiter with
+ which to split the content (\#2295)
+
+**Behavioural Changes**
+
+- Add deprecation warnings to functions in requests.utils that will be
+ removed in 3.0 (\#2309)
+- Sessions used by the functional API are always closed (\#2326)
+- Restrict requests to HTTP/1.1 and HTTP/1.0 (stop accepting HTTP/0.9)
+ (\#2323)
+
+**Bugfixes**
+
+- Only parse the URL once (\#2353)
+- Allow Content-Length header to always be overridden (\#2332)
+- Properly handle files in HTTPDigestAuth (\#2333)
+- Cap redirect\_cache size to prevent memory abuse (\#2299)
+- Fix HTTPDigestAuth handling of redirects after authenticating
+ successfully (\#2253)
+- Fix crash with custom method parameter to Session.request (\#2317)
+- Fix how Link headers are parsed using the regular expression library
+ (\#2271)
+
+**Documentation**
+
+- Add more references for interlinking (\#2348)
+- Update CSS for theme (\#2290)
+- Update width of buttons and sidebar (\#2289)
+- Replace references of Gittip with Gratipay (\#2282)
+- Add link to changelog in sidebar (\#2273)
+
+2.4.3 (2014-10-06)
+------------------
+
+**Bugfixes**
+
+- Unicode URL improvements for Python 2.
+- Re-order JSON param for backwards compat.
+- Automatically defrag authentication schemes from host/pass URIs.
+ ([\#2249](https://github.com/psf/requests/issues/2249))
+
+2.4.2 (2014-10-05)
+------------------
+
+**Improvements**
+
+- FINALLY! Add json parameter for uploads!
+ ([\#2258](https://github.com/psf/requests/pull/2258))
+- Support for bytestring URLs on Python 3.x
+ ([\#2238](https://github.com/psf/requests/pull/2238))
+
+**Bugfixes**
+
+- Avoid getting stuck in a loop
+ ([\#2244](https://github.com/psf/requests/pull/2244))
+- Multiple calls to iter\* fail with unhelpful error.
+ ([\#2240](https://github.com/psf/requests/issues/2240),
+ [\#2241](https://github.com/psf/requests/issues/2241))
+
+**Documentation**
+
+- Correct redirection introduction
+ ([\#2245](https://github.com/psf/requests/pull/2245/))
+- Added example of how to send multiple files in one request.
+ ([\#2227](https://github.com/psf/requests/pull/2227/))
+- Clarify how to pass a custom set of CAs
+ ([\#2248](https://github.com/psf/requests/pull/2248/))
+
+2.4.1 (2014-09-09)
+------------------
+
+- Now has a "security" package extras set,
+ `$ pip install requests[security]`
+- Requests will now use Certifi if it is available.
+- Capture and re-raise urllib3 ProtocolError
+- Bugfix for responses that attempt to redirect to themselves forever
+ (wtf?).
+
+2.4.0 (2014-08-29)
+------------------
+
+**Behavioral Changes**
+
+- `Connection: keep-alive` header is now sent automatically.
+
+**Improvements**
+
+- Support for connect timeouts! Timeout now accepts a tuple (connect,
+ read) which is used to set individual connect and read timeouts.
+- Allow copying of PreparedRequests without headers/cookies.
+- Updated bundled urllib3 version.
+- Refactored settings loading from environment -- new
+ Session.merge\_environment\_settings.
+- Handle socket errors in iter\_content.
+
+2.3.0 (2014-05-16)
+------------------
+
+**API Changes**
+
+- New `Response` property `is_redirect`, which is true when the
+ library could have processed this response as a redirection (whether
+ or not it actually did).
+- The `timeout` parameter now affects requests with both `stream=True`
+ and `stream=False` equally.
+- The change in v2.0.0 to mandate explicit proxy schemes has been
+ reverted. Proxy schemes now default to `http://`.
+- The `CaseInsensitiveDict` used for HTTP headers now behaves like a
+ normal dictionary when references as string or viewed in the
+ interpreter.
+
+**Bugfixes**
+
+- No longer expose Authorization or Proxy-Authorization headers on
+ redirect. Fix CVE-2014-1829 and CVE-2014-1830 respectively.
+- Authorization is re-evaluated each redirect.
+- On redirect, pass url as native strings.
+- Fall-back to autodetected encoding for JSON when Unicode detection
+ fails.
+- Headers set to `None` on the `Session` are now correctly not sent.
+- Correctly honor `decode_unicode` even if it wasn't used earlier in
+ the same response.
+- Stop advertising `compress` as a supported Content-Encoding.
+- The `Response.history` parameter is now always a list.
+- Many, many `urllib3` bugfixes.
+
+2.2.1 (2014-01-23)
+------------------
+
+**Bugfixes**
+
+- Fixes incorrect parsing of proxy credentials that contain a literal
+ or encoded '\#' character.
+- Assorted urllib3 fixes.
+
+2.2.0 (2014-01-09)
+------------------
+
+**API Changes**
+
+- New exception: `ContentDecodingError`. Raised instead of `urllib3`
+ `DecodeError` exceptions.
+
+**Bugfixes**
+
+- Avoid many many exceptions from the buggy implementation of
+ `proxy_bypass` on OS X in Python 2.6.
+- Avoid crashing when attempting to get authentication credentials
+ from \~/.netrc when running as a user without a home directory.
+- Use the correct pool size for pools of connections to proxies.
+- Fix iteration of `CookieJar` objects.
+- Ensure that cookies are persisted over redirect.
+- Switch back to using chardet, since it has merged with charade.
+
+2.1.0 (2013-12-05)
+------------------
+
+- Updated CA Bundle, of course.
+- Cookies set on individual Requests through a `Session` (e.g. via
+ `Session.get()`) are no longer persisted to the `Session`.
+- Clean up connections when we hit problems during chunked upload,
+ rather than leaking them.
+- Return connections to the pool when a chunked upload is successful,
+ rather than leaking it.
+- Match the HTTPbis recommendation for HTTP 301 redirects.
+- Prevent hanging when using streaming uploads and Digest Auth when a
+ 401 is received.
+- Values of headers set by Requests are now always the native string
+ type.
+- Fix previously broken SNI support.
+- Fix accessing HTTP proxies using proxy authentication.
+- Unencode HTTP Basic usernames and passwords extracted from URLs.
+- Support for IP address ranges for no\_proxy environment variable
+- Parse headers correctly when users override the default `Host:`
+ header.
+- Avoid munging the URL in case of case-sensitive servers.
+- Looser URL handling for non-HTTP/HTTPS urls.
+- Accept unicode methods in Python 2.6 and 2.7.
+- More resilient cookie handling.
+- Make `Response` objects pickleable.
+- Actually added MD5-sess to Digest Auth instead of pretending to like
+ last time.
+- Updated internal urllib3.
+- Fixed @Lukasa's lack of taste.
+
+2.0.1 (2013-10-24)
+------------------
+
+- Updated included CA Bundle with new mistrusts and automated process
+ for the future
+- Added MD5-sess to Digest Auth
+- Accept per-file headers in multipart file POST messages.
+- Fixed: Don't send the full URL on CONNECT messages.
+- Fixed: Correctly lowercase a redirect scheme.
+- Fixed: Cookies not persisted when set via functional API.
+- Fixed: Translate urllib3 ProxyError into a requests ProxyError
+ derived from ConnectionError.
+- Updated internal urllib3 and chardet.
+
+2.0.0 (2013-09-24)
+------------------
+
+**API Changes:**
+
+- Keys in the Headers dictionary are now native strings on all Python
+ versions, i.e. bytestrings on Python 2, unicode on Python 3.
+- Proxy URLs now *must* have an explicit scheme. A `MissingSchema`
+ exception will be raised if they don't.
+- Timeouts now apply to read time if `Stream=False`.
+- `RequestException` is now a subclass of `IOError`, not
+ `RuntimeError`.
+- Added new method to `PreparedRequest` objects:
+ `PreparedRequest.copy()`.
+- Added new method to `Session` objects: `Session.update_request()`.
+ This method updates a `Request` object with the data (e.g. cookies)
+ stored on the `Session`.
+- Added new method to `Session` objects: `Session.prepare_request()`.
+ This method updates and prepares a `Request` object, and returns the
+ corresponding `PreparedRequest` object.
+- Added new method to `HTTPAdapter` objects:
+ `HTTPAdapter.proxy_headers()`. This should not be called directly,
+ but improves the subclass interface.
+- `httplib.IncompleteRead` exceptions caused by incorrect chunked
+ encoding will now raise a Requests `ChunkedEncodingError` instead.
+- Invalid percent-escape sequences now cause a Requests `InvalidURL`
+ exception to be raised.
+- HTTP 208 no longer uses reason phrase `"im_used"`. Correctly uses
+ `"already_reported"`.
+- HTTP 226 reason added (`"im_used"`).
+
+**Bugfixes:**
+
+- Vastly improved proxy support, including the CONNECT verb. Special
+ thanks to the many contributors who worked towards this improvement.
+- Cookies are now properly managed when 401 authentication responses
+ are received.
+- Chunked encoding fixes.
+- Support for mixed case schemes.
+- Better handling of streaming downloads.
+- Retrieve environment proxies from more locations.
+- Minor cookies fixes.
+- Improved redirect behaviour.
+- Improved streaming behaviour, particularly for compressed data.
+- Miscellaneous small Python 3 text encoding bugs.
+- `.netrc` no longer overrides explicit auth.
+- Cookies set by hooks are now correctly persisted on Sessions.
+- Fix problem with cookies that specify port numbers in their host
+ field.
+- `BytesIO` can be used to perform streaming uploads.
+- More generous parsing of the `no_proxy` environment variable.
+- Non-string objects can be passed in data values alongside files.
+
+1.2.3 (2013-05-25)
+------------------
+
+- Simple packaging fix
+
+1.2.2 (2013-05-23)
+------------------
+
+- Simple packaging fix
+
+1.2.1 (2013-05-20)
+------------------
+
+- 301 and 302 redirects now change the verb to GET for all verbs, not
+ just POST, improving browser compatibility.
+- Python 3.3.2 compatibility
+- Always percent-encode location headers
+- Fix connection adapter matching to be most-specific first
+- new argument to the default connection adapter for passing a block
+ argument
+- prevent a KeyError when there's no link headers
+
+1.2.0 (2013-03-31)
+------------------
+
+- Fixed cookies on sessions and on requests
+- Significantly change how hooks are dispatched - hooks now receive
+ all the arguments specified by the user when making a request so
+ hooks can make a secondary request with the same parameters. This is
+ especially necessary for authentication handler authors
+- certifi support was removed
+- Fixed bug where using OAuth 1 with body `signature_type` sent no
+ data
+- Major proxy work thanks to @Lukasa including parsing of proxy
+ authentication from the proxy url
+- Fix DigestAuth handling too many 401s
+- Update vendored urllib3 to include SSL bug fixes
+- Allow keyword arguments to be passed to `json.loads()` via the
+ `Response.json()` method
+- Don't send `Content-Length` header by default on `GET` or `HEAD`
+ requests
+- Add `elapsed` attribute to `Response` objects to time how long a
+ request took.
+- Fix `RequestsCookieJar`
+- Sessions and Adapters are now picklable, i.e., can be used with the
+ multiprocessing library
+- Update charade to version 1.0.3
+
+The change in how hooks are dispatched will likely cause a great deal of
+issues.
+
+1.1.0 (2013-01-10)
+------------------
+
+- CHUNKED REQUESTS
+- Support for iterable response bodies
+- Assume servers persist redirect params
+- Allow explicit content types to be specified for file data
+- Make merge\_kwargs case-insensitive when looking up keys
+
+1.0.3 (2012-12-18)
+------------------
+
+- Fix file upload encoding bug
+- Fix cookie behavior
+
+1.0.2 (2012-12-17)
+------------------
+
+- Proxy fix for HTTPAdapter.
+
+1.0.1 (2012-12-17)
+------------------
+
+- Cert verification exception bug.
+- Proxy fix for HTTPAdapter.
+
+1.0.0 (2012-12-17)
+------------------
+
+- Massive Refactor and Simplification
+- Switch to Apache 2.0 license
+- Swappable Connection Adapters
+- Mountable Connection Adapters
+- Mutable ProcessedRequest chain
+- /s/prefetch/stream
+- Removal of all configuration
+- Standard library logging
+- Make Response.json() callable, not property.
+- Usage of new charade project, which provides python 2 and 3
+ simultaneous chardet.
+- Removal of all hooks except 'response'
+- Removal of all authentication helpers (OAuth, Kerberos)
+
+This is not a backwards compatible change.
+
+0.14.2 (2012-10-27)
+-------------------
+
+- Improved mime-compatible JSON handling
+- Proxy fixes
+- Path hack fixes
+- Case-Insensitive Content-Encoding headers
+- Support for CJK parameters in form posts
+
+0.14.1 (2012-10-01)
+-------------------
+
+- Python 3.3 Compatibility
+- Simply default accept-encoding
+- Bugfixes
+
+0.14.0 (2012-09-02)
+-------------------
+
+- No more iter\_content errors if already downloaded.
+
+0.13.9 (2012-08-25)
+-------------------
+
+- Fix for OAuth + POSTs
+- Remove exception eating from dispatch\_hook
+- General bugfixes
+
+0.13.8 (2012-08-21)
+-------------------
+
+- Incredible Link header support :)
+
+0.13.7 (2012-08-19)
+-------------------
+
+- Support for (key, value) lists everywhere.
+- Digest Authentication improvements.
+- Ensure proxy exclusions work properly.
+- Clearer UnicodeError exceptions.
+- Automatic casting of URLs to strings (fURL and such)
+- Bugfixes.
+
+0.13.6 (2012-08-06)
+-------------------
+
+- Long awaited fix for hanging connections!
+
+0.13.5 (2012-07-27)
+-------------------
+
+- Packaging fix
+
+0.13.4 (2012-07-27)
+-------------------
+
+- GSSAPI/Kerberos authentication!
+- App Engine 2.7 Fixes!
+- Fix leaking connections (from urllib3 update)
+- OAuthlib path hack fix
+- OAuthlib URL parameters fix.
+
+0.13.3 (2012-07-12)
+-------------------
+
+- Use simplejson if available.
+- Do not hide SSLErrors behind Timeouts.
+- Fixed param handling with urls containing fragments.
+- Significantly improved information in User Agent.
+- client certificates are ignored when verify=False
+
+0.13.2 (2012-06-28)
+-------------------
+
+- Zero dependencies (once again)!
+- New: Response.reason
+- Sign querystring parameters in OAuth 1.0
+- Client certificates no longer ignored when verify=False
+- Add openSUSE certificate support
+
+0.13.1 (2012-06-07)
+-------------------
+
+- Allow passing a file or file-like object as data.
+- Allow hooks to return responses that indicate errors.
+- Fix Response.text and Response.json for body-less responses.
+
+0.13.0 (2012-05-29)
+-------------------
+
+- Removal of Requests.async in favor of
+ [grequests](https://github.com/kennethreitz/grequests)
+- Allow disabling of cookie persistence.
+- New implementation of safe\_mode
+- cookies.get now supports default argument
+- Session cookies not saved when Session.request is called with
+ return\_response=False
+- Env: no\_proxy support.
+- RequestsCookieJar improvements.
+- Various bug fixes.
+
+0.12.1 (2012-05-08)
+-------------------
+
+- New `Response.json` property.
+- Ability to add string file uploads.
+- Fix out-of-range issue with iter\_lines.
+- Fix iter\_content default size.
+- Fix POST redirects containing files.
+
+0.12.0 (2012-05-02)
+-------------------
+
+- EXPERIMENTAL OAUTH SUPPORT!
+- Proper CookieJar-backed cookies interface with awesome dict-like
+ interface.
+- Speed fix for non-iterated content chunks.
+- Move `pre_request` to a more usable place.
+- New `pre_send` hook.
+- Lazily encode data, params, files.
+- Load system Certificate Bundle if `certify` isn't available.
+- Cleanups, fixes.
+
+0.11.2 (2012-04-22)
+-------------------
+
+- Attempt to use the OS's certificate bundle if `certifi` isn't
+ available.
+- Infinite digest auth redirect fix.
+- Multi-part file upload improvements.
+- Fix decoding of invalid %encodings in URLs.
+- If there is no content in a response don't throw an error the second
+ time that content is attempted to be read.
+- Upload data on redirects.
+
+0.11.1 (2012-03-30)
+-------------------
+
+- POST redirects now break RFC to do what browsers do: Follow up with
+ a GET.
+- New `strict_mode` configuration to disable new redirect behavior.
+
+0.11.0 (2012-03-14)
+-------------------
+
+- Private SSL Certificate support
+- Remove select.poll from Gevent monkeypatching
+- Remove redundant generator for chunked transfer encoding
+- Fix: Response.ok raises Timeout Exception in safe\_mode
+
+0.10.8 (2012-03-09)
+-------------------
+
+- Generate chunked ValueError fix
+- Proxy configuration by environment variables
+- Simplification of iter\_lines.
+- New trust\_env configuration for disabling system/environment hints.
+- Suppress cookie errors.
+
+0.10.7 (2012-03-07)
+-------------------
+
+- encode\_uri = False
+
+0.10.6 (2012-02-25)
+-------------------
+
+- Allow '=' in cookies.
+
+0.10.5 (2012-02-25)
+-------------------
+
+- Response body with 0 content-length fix.
+- New async.imap.
+- Don't fail on netrc.
+
+0.10.4 (2012-02-20)
+-------------------
+
+- Honor netrc.
+
+0.10.3 (2012-02-20)
+-------------------
+
+- HEAD requests don't follow redirects anymore.
+- raise\_for\_status() doesn't raise for 3xx anymore.
+- Make Session objects picklable.
+- ValueError for invalid schema URLs.
+
+0.10.2 (2012-01-15)
+-------------------
+
+- Vastly improved URL quoting.
+- Additional allowed cookie key values.
+- Attempted fix for "Too many open files" Error
+- Replace unicode errors on first pass, no need for second pass.
+- Append '/' to bare-domain urls before query insertion.
+- Exceptions now inherit from RuntimeError.
+- Binary uploads + auth fix.
+- Bugfixes.
+
+0.10.1 (2012-01-23)
+-------------------
+
+- PYTHON 3 SUPPORT!
+- Dropped 2.5 Support. (*Backwards Incompatible*)
+
+0.10.0 (2012-01-21)
+-------------------
+
+- `Response.content` is now bytes-only. (*Backwards Incompatible*)
+- New `Response.text` is unicode-only.
+- If no `Response.encoding` is specified and `chardet` is available,
+ `Response.text` will guess an encoding.
+- Default to ISO-8859-1 (Western) encoding for "text" subtypes.
+- Removal of decode\_unicode. (*Backwards Incompatible*)
+- New multiple-hooks system.
+- New `Response.register_hook` for registering hooks within the
+ pipeline.
+- `Response.url` is now Unicode.
+
+0.9.3 (2012-01-18)
+------------------
+
+- SSL verify=False bugfix (apparent on windows machines).
+
+0.9.2 (2012-01-18)
+------------------
+
+- Asynchronous async.send method.
+- Support for proper chunk streams with boundaries.
+- session argument for Session classes.
+- Print entire hook tracebacks, not just exception instance.
+- Fix response.iter\_lines from pending next line.
+- Fix but in HTTP-digest auth w/ URI having query strings.
+- Fix in Event Hooks section.
+- Urllib3 update.
+
+0.9.1 (2012-01-06)
+------------------
+
+- danger\_mode for automatic Response.raise\_for\_status()
+- Response.iter\_lines refactor
+
+0.9.0 (2011-12-28)
+------------------
+
+- verify ssl is default.
+
+0.8.9 (2011-12-28)
+------------------
+
+- Packaging fix.
+
+0.8.8 (2011-12-28)
+------------------
+
+- SSL CERT VERIFICATION!
+- Release of Cerifi: Mozilla's cert list.
+- New 'verify' argument for SSL requests.
+- Urllib3 update.
+
+0.8.7 (2011-12-24)
+------------------
+
+- iter\_lines last-line truncation fix
+- Force safe\_mode for async requests
+- Handle safe\_mode exceptions more consistently
+- Fix iteration on null responses in safe\_mode
+
+0.8.6 (2011-12-18)
+------------------
+
+- Socket timeout fixes.
+- Proxy Authorization support.
+
+0.8.5 (2011-12-14)
+------------------
+
+- Response.iter\_lines!
+
+0.8.4 (2011-12-11)
+------------------
+
+- Prefetch bugfix.
+- Added license to installed version.
+
+0.8.3 (2011-11-27)
+------------------
+
+- Converted auth system to use simpler callable objects.
+- New session parameter to API methods.
+- Display full URL while logging.
+
+0.8.2 (2011-11-19)
+------------------
+
+- New Unicode decoding system, based on over-ridable
+ Response.encoding.
+- Proper URL slash-quote handling.
+- Cookies with `[`, `]`, and `_` allowed.
+
+0.8.1 (2011-11-15)
+------------------
+
+- URL Request path fix
+- Proxy fix.
+- Timeouts fix.
+
+0.8.0 (2011-11-13)
+------------------
+
+- Keep-alive support!
+- Complete removal of Urllib2
+- Complete removal of Poster
+- Complete removal of CookieJars
+- New ConnectionError raising
+- Safe\_mode for error catching
+- prefetch parameter for request methods
+- OPTION method
+- Async pool size throttling
+- File uploads send real names
+- Vendored in urllib3
+
+0.7.6 (2011-11-07)
+------------------
+
+- Digest authentication bugfix (attach query data to path)
+
+0.7.5 (2011-11-04)
+------------------
+
+- Response.content = None if there was an invalid response.
+- Redirection auth handling.
+
+0.7.4 (2011-10-26)
+------------------
+
+- Session Hooks fix.
+
+0.7.3 (2011-10-23)
+------------------
+
+- Digest Auth fix.
+
+0.7.2 (2011-10-23)
+------------------
+
+- PATCH Fix.
+
+0.7.1 (2011-10-23)
+------------------
+
+- Move away from urllib2 authentication handling.
+- Fully Remove AuthManager, AuthObject, &c.
+- New tuple-based auth system with handler callbacks.
+
+0.7.0 (2011-10-22)
+------------------
+
+- Sessions are now the primary interface.
+- Deprecated InvalidMethodException.
+- PATCH fix.
+- New config system (no more global settings).
+
+0.6.6 (2011-10-19)
+------------------
+
+- Session parameter bugfix (params merging).
+
+0.6.5 (2011-10-18)
+------------------
+
+- Offline (fast) test suite.
+- Session dictionary argument merging.
+
+0.6.4 (2011-10-13)
+------------------
+
+- Automatic decoding of unicode, based on HTTP Headers.
+- New `decode_unicode` setting.
+- Removal of `r.read/close` methods.
+- New `r.faw` interface for advanced response usage.\*
+- Automatic expansion of parameterized headers.
+
+0.6.3 (2011-10-13)
+------------------
+
+- Beautiful `requests.async` module, for making async requests w/
+ gevent.
+
+0.6.2 (2011-10-09)
+------------------
+
+- GET/HEAD obeys allow\_redirects=False.
+
+0.6.1 (2011-08-20)
+------------------
+
+- Enhanced status codes experience `\o/`
+- Set a maximum number of redirects (`settings.max_redirects`)
+- Full Unicode URL support
+- Support for protocol-less redirects.
+- Allow for arbitrary request types.
+- Bugfixes
+
+0.6.0 (2011-08-17)
+------------------
+
+- New callback hook system
+- New persistent sessions object and context manager
+- Transparent Dict-cookie handling
+- Status code reference object
+- Removed Response.cached
+- Added Response.request
+- All args are kwargs
+- Relative redirect support
+- HTTPError handling improvements
+- Improved https testing
+- Bugfixes
+
+0.5.1 (2011-07-23)
+------------------
+
+- International Domain Name Support!
+- Access headers without fetching entire body (`read()`)
+- Use lists as dicts for parameters
+- Add Forced Basic Authentication
+- Forced Basic is default authentication type
+- `python-requests.org` default User-Agent header
+- CaseInsensitiveDict lower-case caching
+- Response.history bugfix
+
+0.5.0 (2011-06-21)
+------------------
+
+- PATCH Support
+- Support for Proxies
+- HTTPBin Test Suite
+- Redirect Fixes
+- settings.verbose stream writing
+- Querystrings for all methods
+- URLErrors (Connection Refused, Timeout, Invalid URLs) are treated as
+ explicitly raised
+ `r.requests.get('hwe://blah'); r.raise_for_status()`
+
+0.4.1 (2011-05-22)
+------------------
+
+- Improved Redirection Handling
+- New 'allow\_redirects' param for following non-GET/HEAD Redirects
+- Settings module refactoring
+
+0.4.0 (2011-05-15)
+------------------
+
+- Response.history: list of redirected responses
+- Case-Insensitive Header Dictionaries!
+- Unicode URLs
+
+0.3.4 (2011-05-14)
+------------------
+
+- Urllib2 HTTPAuthentication Recursion fix (Basic/Digest)
+- Internal Refactor
+- Bytes data upload Bugfix
+
+0.3.3 (2011-05-12)
+------------------
+
+- Request timeouts
+- Unicode url-encoded data
+- Settings context manager and module
+
+0.3.2 (2011-04-15)
+------------------
+
+- Automatic Decompression of GZip Encoded Content
+- AutoAuth Support for Tupled HTTP Auth
+
+0.3.1 (2011-04-01)
+------------------
+
+- Cookie Changes
+- Response.read()
+- Poster fix
+
+0.3.0 (2011-02-25)
+------------------
+
+- Automatic Authentication API Change
+- Smarter Query URL Parameterization
+- Allow file uploads and POST data together
+-
+
+ New Authentication Manager System
+
+ : - Simpler Basic HTTP System
+ - Supports all built-in urllib2 Auths
+ - Allows for custom Auth Handlers
+
+0.2.4 (2011-02-19)
+------------------
+
+- Python 2.5 Support
+- PyPy-c v1.4 Support
+- Auto-Authentication tests
+- Improved Request object constructor
+
+0.2.3 (2011-02-15)
+------------------
+
+-
+
+ New HTTPHandling Methods
+
+ : - Response.\_\_nonzero\_\_ (false if bad HTTP Status)
+ - Response.ok (True if expected HTTP Status)
+ - Response.error (Logged HTTPError if bad HTTP Status)
+ - Response.raise\_for\_status() (Raises stored HTTPError)
+
+0.2.2 (2011-02-14)
+------------------
+
+- Still handles request in the event of an HTTPError. (Issue \#2)
+- Eventlet and Gevent Monkeypatch support.
+- Cookie Support (Issue \#1)
+
+0.2.1 (2011-02-14)
+------------------
+
+- Added file attribute to POST and PUT requests for multipart-encode
+ file uploads.
+- Added Request.url attribute for context and redirects
+
+0.2.0 (2011-02-14)
+------------------
+
+- Birth!
+
+0.0.1 (2011-02-13)
+------------------
+
+- Frustration
+- Conception
diff --git a/HISTORY.rst b/HISTORY.rst
deleted file mode 100644
index 61f7e232b4..0000000000
--- a/HISTORY.rst
+++ /dev/null
@@ -1,1545 +0,0 @@
-.. :changelog:
-
-Release History
----------------
-
-dev
-+++
-
-**Improvements**
-
-- Warn user about possible slowdown when using cryptography version < 1.3.4
-- Check for invalid host in proxy URL, before forwarding request to adapter.
-- Fragments are now properly maintained across redirects. (RFC7231 7.1.2)
-
-**Bugfixes**
-
-- Parsing empty ``Link`` headers with ``parse_header_links()`` no longer return one bogus entry
-- Fixed issue where loading the default certificate bundle from a zip archive
- would raise an ``IOError``
-- Fixed issue with unexpected ``ImportError`` on windows system which do not support ``winreg`` module
-- DNS resolution in proxy bypass no longer includes the username and password in
- the request. This also fixes the issue of DNS queries failing on macOS.
-
-2.18.4 (2017-08-15)
-+++++++++++++++++++
-
-**Improvements**
-
-- Error messages for invalid headers now include the header name for easier debugging
-
-**Dependencies**
-
-- We now support idna v2.6.
-
-2.18.3 (2017-08-02)
-+++++++++++++++++++
-
-**Improvements**
-
-- Running ``$ python -m requests.help`` now includes the installed version of idna.
-
-**Bugfixes**
-
-- Fixed issue where Requests would raise ``ConnectionError`` instead of
- ``SSLError`` when encountering SSL problems when using urllib3 v1.22.
-
-2.18.2 (2017-07-25)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- ``requests.help`` no longer fails on Python 2.6 due to the absence of
- ``ssl.OPENSSL_VERSION_NUMBER``.
-
-**Dependencies**
-
-- We now support urllib3 v1.22.
-
-2.18.1 (2017-06-14)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fix an error in the packaging whereby the ``*.whl`` contained incorrect data
- that regressed the fix in v2.17.3.
-
-2.18.0 (2017-06-14)
-+++++++++++++++++++
-
-**Improvements**
-
-- ``Response`` is now a context manager, so can be used directly in a ``with`` statement
- without first having to be wrapped by ``contextlib.closing()``.
-
-**Bugfixes**
-
-- Resolve installation failure if multiprocessing is not available
-- Resolve tests crash if multiprocessing is not able to determine the number of CPU cores
-- Resolve error swallowing in utils set_environ generator
-
-
-2.17.3 (2017-05-29)
-+++++++++++++++++++
-
-**Improvements**
-
-- Improved ``packages`` namespace identity support, for monkeypatching libraries.
-
-
-2.17.2 (2017-05-29)
-+++++++++++++++++++
-
-**Improvements**
-
-- Improved ``packages`` namespace identity support, for monkeypatching libraries.
-
-
-2.17.1 (2017-05-29)
-+++++++++++++++++++
-
-**Improvements**
-
-- Improved ``packages`` namespace identity support, for monkeypatching libraries.
-
-
-2.17.0 (2017-05-29)
-+++++++++++++++++++
-
-**Improvements**
-
-- Removal of the 301 redirect cache. This improves thread-safety.
-
-
-2.16.5 (2017-05-28)
-+++++++++++++++++++
-
-- Improvements to ``$ python -m requests.help``.
-
-2.16.4 (2017-05-27)
-+++++++++++++++++++
-
-- Introduction of the ``$ python -m requests.help`` command, for debugging with maintainers!
-
-2.16.3 (2017-05-27)
-+++++++++++++++++++
-
-- Further restored the ``requests.packages`` namespace for compatibility reasons.
-
-2.16.2 (2017-05-27)
-+++++++++++++++++++
-
-- Further restored the ``requests.packages`` namespace for compatibility reasons.
-
-No code modification (noted below) should be necessary any longer.
-
-2.16.1 (2017-05-27)
-+++++++++++++++++++
-
-- Restored the ``requests.packages`` namespace for compatibility reasons.
-- Bugfix for ``urllib3`` version parsing.
-
-**Note**: code that was written to import against the ``requests.packages``
-namespace previously will have to import code that rests at this module-level
-now.
-
-For example::
-
- from requests.packages.urllib3.poolmanager import PoolManager
-
-Will need to be re-written to be::
-
- from requests.packages import urllib3
- urllib3.poolmanager.PoolManager
-
-Or, even better::
-
- from urllib3.poolmanager import PoolManager
-
-2.16.0 (2017-05-26)
-+++++++++++++++++++
-
-- Unvendor ALL the things!
-
-2.15.1 (2017-05-26)
-+++++++++++++++++++
-
-- Everyone makes mistakes.
-
-2.15.0 (2017-05-26)
-+++++++++++++++++++
-
-**Improvements**
-
-- Introduction of the ``Response.next`` property, for getting the next
- ``PreparedResponse`` from a redirect chain (when ``allow_redirects=False``).
-- Internal refactoring of ``__version__`` module.
-
-**Bugfixes**
-
-- Restored once-optional parameter for ``requests.utils.get_environ_proxies()``.
-
-2.14.2 (2017-05-10)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Changed a less-than to an equal-to and an or in the dependency markers to
- widen compatibility with older setuptools releases.
-
-2.14.1 (2017-05-09)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Changed the dependency markers to widen compatibility with older pip
- releases.
-
-2.14.0 (2017-05-09)
-+++++++++++++++++++
-
-**Improvements**
-
-- It is now possible to pass ``no_proxy`` as a key to the ``proxies``
- dictionary to provide handling similar to the ``NO_PROXY`` environment
- variable.
-- When users provide invalid paths to certificate bundle files or directories
- Requests now raises ``IOError``, rather than failing at the time of the HTTPS
- request with a fairly inscrutable certificate validation error.
-- The behavior of ``SessionRedirectMixin`` was slightly altered.
- ``resolve_redirects`` will now detect a redirect by calling
- ``get_redirect_target(response)`` instead of directly
- querying ``Response.is_redirect`` and ``Response.headers['location']``.
- Advanced users will be able to process malformed redirects more easily.
-- Changed the internal calculation of elapsed request time to have higher
- resolution on Windows.
-- Added ``win_inet_pton`` as conditional dependency for the ``[socks]`` extra
- on Windows with Python 2.7.
-- Changed the proxy bypass implementation on Windows: the proxy bypass
- check doesn't use forward and reverse DNS requests anymore
-- URLs with schemes that begin with ``http`` but are not ``http`` or ``https``
- no longer have their host parts forced to lowercase.
-
-**Bugfixes**
-
-- Much improved handling of non-ASCII ``Location`` header values in redirects.
- Fewer ``UnicodeDecodeErrors`` are encountered on Python 2, and Python 3 now
- correctly understands that Latin-1 is unlikely to be the correct encoding.
-- If an attempt to ``seek`` file to find out its length fails, we now
- appropriately handle that by aborting our content-length calculations.
-- Restricted ``HTTPDigestAuth`` to only respond to auth challenges made on 4XX
- responses, rather than to all auth challenges.
-- Fixed some code that was firing ``DeprecationWarning`` on Python 3.6.
-- The dismayed person emoticon (``/o\\``) no longer has a big head. I'm sure
- this is what you were all worrying about most.
-
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to v1.21.1.
-- Updated bundled chardet to v3.0.2.
-- Updated bundled idna to v2.5.
-- Updated bundled certifi to 2017.4.17.
-
-2.13.0 (2017-01-24)
-+++++++++++++++++++
-
-**Features**
-
-- Only load the ``idna`` library when we've determined we need it. This will
- save some memory for users.
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.20.
-- Updated bundled idna to 2.2.
-
-2.12.5 (2017-01-18)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fixed an issue with JSON encoding detection, specifically detecting
- big-endian UTF-32 with BOM.
-
-2.12.4 (2016-12-14)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fixed regression from 2.12.2 where non-string types were rejected in the
- basic auth parameters. While support for this behaviour has been readded,
- the behaviour is deprecated and will be removed in the future.
-
-2.12.3 (2016-12-01)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fixed regression from v2.12.1 for URLs with schemes that begin with "http".
- These URLs have historically been processed as though they were HTTP-schemed
- URLs, and so have had parameters added. This was removed in v2.12.2 in an
- overzealous attempt to resolve problems with IDNA-encoding those URLs. This
- change was reverted: the other fixes for IDNA-encoding have been judged to
- be sufficient to return to the behaviour Requests had before v2.12.0.
-
-2.12.2 (2016-11-30)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fixed several issues with IDNA-encoding URLs that are technically invalid but
- which are widely accepted. Requests will now attempt to IDNA-encode a URL if
- it can but, if it fails, and the host contains only ASCII characters, it will
- be passed through optimistically. This will allow users to opt-in to using
- IDNA2003 themselves if they want to, and will also allow technically invalid
- but still common hostnames.
-- Fixed an issue where URLs with leading whitespace would raise
- ``InvalidSchema`` errors.
-- Fixed an issue where some URLs without the HTTP or HTTPS schemes would still
- have HTTP URL preparation applied to them.
-- Fixed an issue where Unicode strings could not be used in basic auth.
-- Fixed an issue encountered by some Requests plugins where constructing a
- Response object would cause ``Response.content`` to raise an
- ``AttributeError``.
-
-2.12.1 (2016-11-16)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Updated setuptools 'security' extra for the new PyOpenSSL backend in urllib3.
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.19.1.
-
-2.12.0 (2016-11-15)
-+++++++++++++++++++
-
-**Improvements**
-
-- Updated support for internationalized domain names from IDNA2003 to IDNA2008.
- This updated support is required for several forms of IDNs and is mandatory
- for .de domains.
-- Much improved heuristics for guessing content lengths: Requests will no
- longer read an entire ``StringIO`` into memory.
-- Much improved logic for recalculating ``Content-Length`` headers for
- ``PreparedRequest`` objects.
-- Improved tolerance for file-like objects that have no ``tell`` method but
- do have a ``seek`` method.
-- Anything that is a subclass of ``Mapping`` is now treated like a dictionary
- by the ``data=`` keyword argument.
-- Requests now tolerates empty passwords in proxy credentials, rather than
- stripping the credentials.
-- If a request is made with a file-like object as the body and that request is
- redirected with a 307 or 308 status code, Requests will now attempt to
- rewind the body object so it can be replayed.
-
-**Bugfixes**
-
-- When calling ``response.close``, the call to ``close`` will be propagated
- through to non-urllib3 backends.
-- Fixed issue where the ``ALL_PROXY`` environment variable would be preferred
- over scheme-specific variables like ``HTTP_PROXY``.
-- Fixed issue where non-UTF8 reason phrases got severely mangled by falling
- back to decoding using ISO 8859-1 instead.
-- Fixed a bug where Requests would not correctly correlate cookies set when
- using custom Host headers if those Host headers did not use the native
- string type for the platform.
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.19.
-- Updated bundled certifi certs to 2016.09.26.
-
-2.11.1 (2016-08-17)
-+++++++++++++++++++
-
-**Bugfixes**
-
-- Fixed a bug when using ``iter_content`` with ``decode_unicode=True`` for
- streamed bodies would raise ``AttributeError``. This bug was introduced in
- 2.11.
-- Strip Content-Type and Transfer-Encoding headers from the header block when
- following a redirect that transforms the verb from POST/PUT to GET.
-
-2.11.0 (2016-08-08)
-+++++++++++++++++++
-
-**Improvements**
-
-- Added support for the ``ALL_PROXY`` environment variable.
-- Reject header values that contain leading whitespace or newline characters to
- reduce risk of header smuggling.
-
-**Bugfixes**
-
-- Fixed occasional ``TypeError`` when attempting to decode a JSON response that
- occurred in an error case. Now correctly returns a ``ValueError``.
-- Requests would incorrectly ignore a non-CIDR IP address in the ``NO_PROXY``
- environment variables: Requests now treats it as a specific IP.
-- Fixed a bug when sending JSON data that could cause us to encounter obscure
- OpenSSL errors in certain network conditions (yes, really).
-- Added type checks to ensure that ``iter_content`` only accepts integers and
- ``None`` for chunk sizes.
-- Fixed issue where responses whose body had not been fully consumed would have
- the underlying connection closed but not returned to the connection pool,
- which could cause Requests to hang in situations where the ``HTTPAdapter``
- had been configured to use a blocking connection pool.
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.16.
-- Some previous releases accidentally accepted non-strings as acceptable header values. This release does not.
-
-2.10.0 (2016-04-29)
-+++++++++++++++++++
-
-**New Features**
-
-- SOCKS Proxy Support! (requires PySocks; ``$ pip install requests[socks]``)
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.15.1.
-
-2.9.2 (2016-04-29)
-++++++++++++++++++
-
-**Improvements**
-
-- Change built-in CaseInsensitiveDict (used for headers) to use OrderedDict
- as its underlying datastore.
-
-**Bugfixes**
-
-- Don't use redirect_cache if allow_redirects=False
-- When passed objects that throw exceptions from ``tell()``, send them via
- chunked transfer encoding instead of failing.
-- Raise a ProxyError for proxy related connection issues.
-
-2.9.1 (2015-12-21)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Resolve regression introduced in 2.9.0 that made it impossible to send binary
- strings as bodies in Python 3.
-- Fixed errors when calculating cookie expiration dates in certain locales.
-
-**Miscellaneous**
-
-- Updated bundled urllib3 to 1.13.1.
-
-2.9.0 (2015-12-15)
-++++++++++++++++++
-
-**Minor Improvements** (Backwards compatible)
-
-- The ``verify`` keyword argument now supports being passed a path to a
- directory of CA certificates, not just a single-file bundle.
-- Warnings are now emitted when sending files opened in text mode.
-- Added the 511 Network Authentication Required status code to the status code
- registry.
-
-**Bugfixes**
-
-- For file-like objects that are not seeked to the very beginning, we now
- send the content length for the number of bytes we will actually read, rather
- than the total size of the file, allowing partial file uploads.
-- When uploading file-like objects, if they are empty or have no obvious
- content length we set ``Transfer-Encoding: chunked`` rather than
- ``Content-Length: 0``.
-- We correctly receive the response in buffered mode when uploading chunked
- bodies.
-- We now handle being passed a query string as a bytestring on Python 3, by
- decoding it as UTF-8.
-- Sessions are now closed in all cases (exceptional and not) when using the
- functional API rather than leaking and waiting for the garbage collector to
- clean them up.
-- Correctly handle digest auth headers with a malformed ``qop`` directive that
- contains no token, by treating it the same as if no ``qop`` directive was
- provided at all.
-- Minor performance improvements when removing specific cookies by name.
-
-**Miscellaneous**
-
-- Updated urllib3 to 1.13.
-
-2.8.1 (2015-10-13)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Update certificate bundle to match ``certifi`` 2015.9.6.2's weak certificate
- bundle.
-- Fix a bug in 2.8.0 where requests would raise ``ConnectTimeout`` instead of
- ``ConnectionError``
-- When using the PreparedRequest flow, requests will now correctly respect the
- ``json`` parameter. Broken in 2.8.0.
-- When using the PreparedRequest flow, requests will now correctly handle a
- Unicode-string method name on Python 2. Broken in 2.8.0.
-
-2.8.0 (2015-10-05)
-++++++++++++++++++
-
-**Minor Improvements** (Backwards Compatible)
-
-- Requests now supports per-host proxies. This allows the ``proxies``
- dictionary to have entries of the form
- ``{'://': ''}``. Host-specific proxies will be used
- in preference to the previously-supported scheme-specific ones, but the
- previous syntax will continue to work.
-- ``Response.raise_for_status`` now prints the URL that failed as part of the
- exception message.
-- ``requests.utils.get_netrc_auth`` now takes an ``raise_errors`` kwarg,
- defaulting to ``False``. When ``True``, errors parsing ``.netrc`` files cause
- exceptions to be thrown.
-- Change to bundled projects import logic to make it easier to unbundle
- requests downstream.
-- Changed the default User-Agent string to avoid leaking data on Linux: now
- contains only the requests version.
-
-**Bugfixes**
-
-- The ``json`` parameter to ``post()`` and friends will now only be used if
- neither ``data`` nor ``files`` are present, consistent with the
- documentation.
-- We now ignore empty fields in the ``NO_PROXY`` environment variable.
-- Fixed problem where ``httplib.BadStatusLine`` would get raised if combining
- ``stream=True`` with ``contextlib.closing``.
-- Prevented bugs where we would attempt to return the same connection back to
- the connection pool twice when sending a Chunked body.
-- Miscellaneous minor internal changes.
-- Digest Auth support is now thread safe.
-
-**Updates**
-
-- Updated urllib3 to 1.12.
-
-2.7.0 (2015-05-03)
-++++++++++++++++++
-
-This is the first release that follows our new release process. For more, see
-`our documentation
-`_.
-
-**Bugfixes**
-
-- Updated urllib3 to 1.10.4, resolving several bugs involving chunked transfer
- encoding and response framing.
-
-2.6.2 (2015-04-23)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Fix regression where compressed data that was sent as chunked data was not
- properly decompressed. (#2561)
-
-2.6.1 (2015-04-22)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Remove VendorAlias import machinery introduced in v2.5.2.
-
-- Simplify the PreparedRequest.prepare API: We no longer require the user to
- pass an empty list to the hooks keyword argument. (c.f. #2552)
-
-- Resolve redirects now receives and forwards all of the original arguments to
- the adapter. (#2503)
-
-- Handle UnicodeDecodeErrors when trying to deal with a unicode URL that
- cannot be encoded in ASCII. (#2540)
-
-- Populate the parsed path of the URI field when performing Digest
- Authentication. (#2426)
-
-- Copy a PreparedRequest's CookieJar more reliably when it is not an instance
- of RequestsCookieJar. (#2527)
-
-2.6.0 (2015-03-14)
-++++++++++++++++++
-
-**Bugfixes**
-
-- CVE-2015-2296: Fix handling of cookies on redirect. Previously a cookie
- without a host value set would use the hostname for the redirected URL
- exposing requests users to session fixation attacks and potentially cookie
- stealing. This was disclosed privately by Matthew Daley of
- `BugFuzz `_. This affects all versions of requests from
- v2.1.0 to v2.5.3 (inclusive on both ends).
-
-- Fix error when requests is an ``install_requires`` dependency and ``python
- setup.py test`` is run. (#2462)
-
-- Fix error when urllib3 is unbundled and requests continues to use the
- vendored import location.
-
-- Include fixes to ``urllib3``'s header handling.
-
-- Requests' handling of unvendored dependencies is now more restrictive.
-
-**Features and Improvements**
-
-- Support bytearrays when passed as parameters in the ``files`` argument.
- (#2468)
-
-- Avoid data duplication when creating a request with ``str``, ``bytes``, or
- ``bytearray`` input to the ``files`` argument.
-
-2.5.3 (2015-02-24)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Revert changes to our vendored certificate bundle. For more context see
- (#2455, #2456, and http://bugs.python.org/issue23476)
-
-2.5.2 (2015-02-23)
-++++++++++++++++++
-
-**Features and Improvements**
-
-- Add sha256 fingerprint support. (`shazow/urllib3#540`_)
-
-- Improve the performance of headers. (`shazow/urllib3#544`_)
-
-**Bugfixes**
-
-- Copy pip's import machinery. When downstream redistributors remove
- requests.packages.urllib3 the import machinery will continue to let those
- same symbols work. Example usage in requests' documentation and 3rd-party
- libraries relying on the vendored copies of urllib3 will work without having
- to fallback to the system urllib3.
-
-- Attempt to quote parts of the URL on redirect if unquoting and then quoting
- fails. (#2356)
-
-- Fix filename type check for multipart form-data uploads. (#2411)
-
-- Properly handle the case where a server issuing digest authentication
- challenges provides both auth and auth-int qop-values. (#2408)
-
-- Fix a socket leak. (`shazow/urllib3#549`_)
-
-- Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_)
-
-- Disable the built-in hostname verification. (`shazow/urllib3#526`_)
-
-- Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_)
-
-**Security**
-
-- Pulled in an updated ``cacert.pem``.
-
-- Drop RC4 from the default cipher list. (`shazow/urllib3#551`_)
-
-.. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551
-.. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549
-.. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544
-.. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540
-.. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535
-.. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534
-.. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526
-
-2.5.1 (2014-12-23)
-++++++++++++++++++
-
-**Behavioural Changes**
-
-- Only catch HTTPErrors in raise_for_status (#2382)
-
-**Bugfixes**
-
-- Handle LocationParseError from urllib3 (#2344)
-- Handle file-like object filenames that are not strings (#2379)
-- Unbreak HTTPDigestAuth handler. Allow new nonces to be negotiated (#2389)
-
-2.5.0 (2014-12-01)
-++++++++++++++++++
-
-**Improvements**
-
-- Allow usage of urllib3's Retry object with HTTPAdapters (#2216)
-- The ``iter_lines`` method on a response now accepts a delimiter with which
- to split the content (#2295)
-
-**Behavioural Changes**
-
-- Add deprecation warnings to functions in requests.utils that will be removed
- in 3.0 (#2309)
-- Sessions used by the functional API are always closed (#2326)
-- Restrict requests to HTTP/1.1 and HTTP/1.0 (stop accepting HTTP/0.9) (#2323)
-
-**Bugfixes**
-
-- Only parse the URL once (#2353)
-- Allow Content-Length header to always be overridden (#2332)
-- Properly handle files in HTTPDigestAuth (#2333)
-- Cap redirect_cache size to prevent memory abuse (#2299)
-- Fix HTTPDigestAuth handling of redirects after authenticating successfully
- (#2253)
-- Fix crash with custom method parameter to Session.request (#2317)
-- Fix how Link headers are parsed using the regular expression library (#2271)
-
-**Documentation**
-
-- Add more references for interlinking (#2348)
-- Update CSS for theme (#2290)
-- Update width of buttons and sidebar (#2289)
-- Replace references of Gittip with Gratipay (#2282)
-- Add link to changelog in sidebar (#2273)
-
-2.4.3 (2014-10-06)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Unicode URL improvements for Python 2.
-- Re-order JSON param for backwards compat.
-- Automatically defrag authentication schemes from host/pass URIs. (`#2249 `_)
-
-
-2.4.2 (2014-10-05)
-++++++++++++++++++
-
-**Improvements**
-
-- FINALLY! Add json parameter for uploads! (`#2258 `_)
-- Support for bytestring URLs on Python 3.x (`#2238 `_)
-
-**Bugfixes**
-
-- Avoid getting stuck in a loop (`#2244 `_)
-- Multiple calls to iter* fail with unhelpful error. (`#2240 `_, `#2241 `_)
-
-**Documentation**
-
-- Correct redirection introduction (`#2245 `_)
-- Added example of how to send multiple files in one request. (`#2227 `_)
-- Clarify how to pass a custom set of CAs (`#2248 `_)
-
-
-
-2.4.1 (2014-09-09)
-++++++++++++++++++
-
-- Now has a "security" package extras set, ``$ pip install requests[security]``
-- Requests will now use Certifi if it is available.
-- Capture and re-raise urllib3 ProtocolError
-- Bugfix for responses that attempt to redirect to themselves forever (wtf?).
-
-
-2.4.0 (2014-08-29)
-++++++++++++++++++
-
-**Behavioral Changes**
-
-- ``Connection: keep-alive`` header is now sent automatically.
-
-**Improvements**
-
-- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts.
-- Allow copying of PreparedRequests without headers/cookies.
-- Updated bundled urllib3 version.
-- Refactored settings loading from environment -- new `Session.merge_environment_settings`.
-- Handle socket errors in iter_content.
-
-
-2.3.0 (2014-05-16)
-++++++++++++++++++
-
-**API Changes**
-
-- New ``Response`` property ``is_redirect``, which is true when the
- library could have processed this response as a redirection (whether
- or not it actually did).
-- The ``timeout`` parameter now affects requests with both ``stream=True`` and
- ``stream=False`` equally.
-- The change in v2.0.0 to mandate explicit proxy schemes has been reverted.
- Proxy schemes now default to ``http://``.
-- The ``CaseInsensitiveDict`` used for HTTP headers now behaves like a normal
- dictionary when references as string or viewed in the interpreter.
-
-**Bugfixes**
-
-- No longer expose Authorization or Proxy-Authorization headers on redirect.
- Fix CVE-2014-1829 and CVE-2014-1830 respectively.
-- Authorization is re-evaluated each redirect.
-- On redirect, pass url as native strings.
-- Fall-back to autodetected encoding for JSON when Unicode detection fails.
-- Headers set to ``None`` on the ``Session`` are now correctly not sent.
-- Correctly honor ``decode_unicode`` even if it wasn't used earlier in the same
- response.
-- Stop advertising ``compress`` as a supported Content-Encoding.
-- The ``Response.history`` parameter is now always a list.
-- Many, many ``urllib3`` bugfixes.
-
-2.2.1 (2014-01-23)
-++++++++++++++++++
-
-**Bugfixes**
-
-- Fixes incorrect parsing of proxy credentials that contain a literal or encoded '#' character.
-- Assorted urllib3 fixes.
-
-2.2.0 (2014-01-09)
-++++++++++++++++++
-
-**API Changes**
-
-- New exception: ``ContentDecodingError``. Raised instead of ``urllib3``
- ``DecodeError`` exceptions.
-
-**Bugfixes**
-
-- Avoid many many exceptions from the buggy implementation of ``proxy_bypass`` on OS X in Python 2.6.
-- Avoid crashing when attempting to get authentication credentials from ~/.netrc when running as a user without a home directory.
-- Use the correct pool size for pools of connections to proxies.
-- Fix iteration of ``CookieJar`` objects.
-- Ensure that cookies are persisted over redirect.
-- Switch back to using chardet, since it has merged with charade.
-
-2.1.0 (2013-12-05)
-++++++++++++++++++
-
-- Updated CA Bundle, of course.
-- Cookies set on individual Requests through a ``Session`` (e.g. via ``Session.get()``) are no longer persisted to the ``Session``.
-- Clean up connections when we hit problems during chunked upload, rather than leaking them.
-- Return connections to the pool when a chunked upload is successful, rather than leaking it.
-- Match the HTTPbis recommendation for HTTP 301 redirects.
-- Prevent hanging when using streaming uploads and Digest Auth when a 401 is received.
-- Values of headers set by Requests are now always the native string type.
-- Fix previously broken SNI support.
-- Fix accessing HTTP proxies using proxy authentication.
-- Unencode HTTP Basic usernames and passwords extracted from URLs.
-- Support for IP address ranges for no_proxy environment variable
-- Parse headers correctly when users override the default ``Host:`` header.
-- Avoid munging the URL in case of case-sensitive servers.
-- Looser URL handling for non-HTTP/HTTPS urls.
-- Accept unicode methods in Python 2.6 and 2.7.
-- More resilient cookie handling.
-- Make ``Response`` objects pickleable.
-- Actually added MD5-sess to Digest Auth instead of pretending to like last time.
-- Updated internal urllib3.
-- Fixed @Lukasa's lack of taste.
-
-2.0.1 (2013-10-24)
-++++++++++++++++++
-
-- Updated included CA Bundle with new mistrusts and automated process for the future
-- Added MD5-sess to Digest Auth
-- Accept per-file headers in multipart file POST messages.
-- Fixed: Don't send the full URL on CONNECT messages.
-- Fixed: Correctly lowercase a redirect scheme.
-- Fixed: Cookies not persisted when set via functional API.
-- Fixed: Translate urllib3 ProxyError into a requests ProxyError derived from ConnectionError.
-- Updated internal urllib3 and chardet.
-
-2.0.0 (2013-09-24)
-++++++++++++++++++
-
-**API Changes:**
-
-- Keys in the Headers dictionary are now native strings on all Python versions,
- i.e. bytestrings on Python 2, unicode on Python 3.
-- Proxy URLs now *must* have an explicit scheme. A ``MissingSchema`` exception
- will be raised if they don't.
-- Timeouts now apply to read time if ``Stream=False``.
-- ``RequestException`` is now a subclass of ``IOError``, not ``RuntimeError``.
-- Added new method to ``PreparedRequest`` objects: ``PreparedRequest.copy()``.
-- Added new method to ``Session`` objects: ``Session.update_request()``. This
- method updates a ``Request`` object with the data (e.g. cookies) stored on
- the ``Session``.
-- Added new method to ``Session`` objects: ``Session.prepare_request()``. This
- method updates and prepares a ``Request`` object, and returns the
- corresponding ``PreparedRequest`` object.
-- Added new method to ``HTTPAdapter`` objects: ``HTTPAdapter.proxy_headers()``.
- This should not be called directly, but improves the subclass interface.
-- ``httplib.IncompleteRead`` exceptions caused by incorrect chunked encoding
- will now raise a Requests ``ChunkedEncodingError`` instead.
-- Invalid percent-escape sequences now cause a Requests ``InvalidURL``
- exception to be raised.
-- HTTP 208 no longer uses reason phrase ``"im_used"``. Correctly uses
- ``"already_reported"``.
-- HTTP 226 reason added (``"im_used"``).
-
-**Bugfixes:**
-
-- Vastly improved proxy support, including the CONNECT verb. Special thanks to
- the many contributors who worked towards this improvement.
-- Cookies are now properly managed when 401 authentication responses are
- received.
-- Chunked encoding fixes.
-- Support for mixed case schemes.
-- Better handling of streaming downloads.
-- Retrieve environment proxies from more locations.
-- Minor cookies fixes.
-- Improved redirect behaviour.
-- Improved streaming behaviour, particularly for compressed data.
-- Miscellaneous small Python 3 text encoding bugs.
-- ``.netrc`` no longer overrides explicit auth.
-- Cookies set by hooks are now correctly persisted on Sessions.
-- Fix problem with cookies that specify port numbers in their host field.
-- ``BytesIO`` can be used to perform streaming uploads.
-- More generous parsing of the ``no_proxy`` environment variable.
-- Non-string objects can be passed in data values alongside files.
-
-1.2.3 (2013-05-25)
-++++++++++++++++++
-
-- Simple packaging fix
-
-
-1.2.2 (2013-05-23)
-++++++++++++++++++
-
-- Simple packaging fix
-
-
-1.2.1 (2013-05-20)
-++++++++++++++++++
-
-- 301 and 302 redirects now change the verb to GET for all verbs, not just
- POST, improving browser compatibility.
-- Python 3.3.2 compatibility
-- Always percent-encode location headers
-- Fix connection adapter matching to be most-specific first
-- new argument to the default connection adapter for passing a block argument
-- prevent a KeyError when there's no link headers
-
-1.2.0 (2013-03-31)
-++++++++++++++++++
-
-- Fixed cookies on sessions and on requests
-- Significantly change how hooks are dispatched - hooks now receive all the
- arguments specified by the user when making a request so hooks can make a
- secondary request with the same parameters. This is especially necessary for
- authentication handler authors
-- certifi support was removed
-- Fixed bug where using OAuth 1 with body ``signature_type`` sent no data
-- Major proxy work thanks to @Lukasa including parsing of proxy authentication
- from the proxy url
-- Fix DigestAuth handling too many 401s
-- Update vendored urllib3 to include SSL bug fixes
-- Allow keyword arguments to be passed to ``json.loads()`` via the
- ``Response.json()`` method
-- Don't send ``Content-Length`` header by default on ``GET`` or ``HEAD``
- requests
-- Add ``elapsed`` attribute to ``Response`` objects to time how long a request
- took.
-- Fix ``RequestsCookieJar``
-- Sessions and Adapters are now picklable, i.e., can be used with the
- multiprocessing library
-- Update charade to version 1.0.3
-
-The change in how hooks are dispatched will likely cause a great deal of
-issues.
-
-1.1.0 (2013-01-10)
-++++++++++++++++++
-
-- CHUNKED REQUESTS
-- Support for iterable response bodies
-- Assume servers persist redirect params
-- Allow explicit content types to be specified for file data
-- Make merge_kwargs case-insensitive when looking up keys
-
-1.0.3 (2012-12-18)
-++++++++++++++++++
-
-- Fix file upload encoding bug
-- Fix cookie behavior
-
-1.0.2 (2012-12-17)
-++++++++++++++++++
-
-- Proxy fix for HTTPAdapter.
-
-1.0.1 (2012-12-17)
-++++++++++++++++++
-
-- Cert verification exception bug.
-- Proxy fix for HTTPAdapter.
-
-1.0.0 (2012-12-17)
-++++++++++++++++++
-
-- Massive Refactor and Simplification
-- Switch to Apache 2.0 license
-- Swappable Connection Adapters
-- Mountable Connection Adapters
-- Mutable ProcessedRequest chain
-- /s/prefetch/stream
-- Removal of all configuration
-- Standard library logging
-- Make Response.json() callable, not property.
-- Usage of new charade project, which provides python 2 and 3 simultaneous chardet.
-- Removal of all hooks except 'response'
-- Removal of all authentication helpers (OAuth, Kerberos)
-
-This is not a backwards compatible change.
-
-0.14.2 (2012-10-27)
-+++++++++++++++++++
-
-- Improved mime-compatible JSON handling
-- Proxy fixes
-- Path hack fixes
-- Case-Insensitive Content-Encoding headers
-- Support for CJK parameters in form posts
-
-
-0.14.1 (2012-10-01)
-+++++++++++++++++++
-
-- Python 3.3 Compatibility
-- Simply default accept-encoding
-- Bugfixes
-
-
-0.14.0 (2012-09-02)
-++++++++++++++++++++
-
-- No more iter_content errors if already downloaded.
-
-0.13.9 (2012-08-25)
-+++++++++++++++++++
-
-- Fix for OAuth + POSTs
-- Remove exception eating from dispatch_hook
-- General bugfixes
-
-0.13.8 (2012-08-21)
-+++++++++++++++++++
-
-- Incredible Link header support :)
-
-0.13.7 (2012-08-19)
-+++++++++++++++++++
-
-- Support for (key, value) lists everywhere.
-- Digest Authentication improvements.
-- Ensure proxy exclusions work properly.
-- Clearer UnicodeError exceptions.
-- Automatic casting of URLs to strings (fURL and such)
-- Bugfixes.
-
-0.13.6 (2012-08-06)
-+++++++++++++++++++
-
-- Long awaited fix for hanging connections!
-
-0.13.5 (2012-07-27)
-+++++++++++++++++++
-
-- Packaging fix
-
-0.13.4 (2012-07-27)
-+++++++++++++++++++
-
-- GSSAPI/Kerberos authentication!
-- App Engine 2.7 Fixes!
-- Fix leaking connections (from urllib3 update)
-- OAuthlib path hack fix
-- OAuthlib URL parameters fix.
-
-0.13.3 (2012-07-12)
-+++++++++++++++++++
-
-- Use simplejson if available.
-- Do not hide SSLErrors behind Timeouts.
-- Fixed param handling with urls containing fragments.
-- Significantly improved information in User Agent.
-- client certificates are ignored when verify=False
-
-0.13.2 (2012-06-28)
-+++++++++++++++++++
-
-- Zero dependencies (once again)!
-- New: Response.reason
-- Sign querystring parameters in OAuth 1.0
-- Client certificates no longer ignored when verify=False
-- Add openSUSE certificate support
-
-0.13.1 (2012-06-07)
-+++++++++++++++++++
-
-- Allow passing a file or file-like object as data.
-- Allow hooks to return responses that indicate errors.
-- Fix Response.text and Response.json for body-less responses.
-
-0.13.0 (2012-05-29)
-+++++++++++++++++++
-
-- Removal of Requests.async in favor of `grequests `_
-- Allow disabling of cookie persistence.
-- New implementation of safe_mode
-- cookies.get now supports default argument
-- Session cookies not saved when Session.request is called with return_response=False
-- Env: no_proxy support.
-- RequestsCookieJar improvements.
-- Various bug fixes.
-
-0.12.1 (2012-05-08)
-+++++++++++++++++++
-
-- New ``Response.json`` property.
-- Ability to add string file uploads.
-- Fix out-of-range issue with iter_lines.
-- Fix iter_content default size.
-- Fix POST redirects containing files.
-
-0.12.0 (2012-05-02)
-+++++++++++++++++++
-
-- EXPERIMENTAL OAUTH SUPPORT!
-- Proper CookieJar-backed cookies interface with awesome dict-like interface.
-- Speed fix for non-iterated content chunks.
-- Move ``pre_request`` to a more usable place.
-- New ``pre_send`` hook.
-- Lazily encode data, params, files.
-- Load system Certificate Bundle if ``certify`` isn't available.
-- Cleanups, fixes.
-
-0.11.2 (2012-04-22)
-+++++++++++++++++++
-
-- Attempt to use the OS's certificate bundle if ``certifi`` isn't available.
-- Infinite digest auth redirect fix.
-- Multi-part file upload improvements.
-- Fix decoding of invalid %encodings in URLs.
-- If there is no content in a response don't throw an error the second time that content is attempted to be read.
-- Upload data on redirects.
-
-0.11.1 (2012-03-30)
-+++++++++++++++++++
-
-* POST redirects now break RFC to do what browsers do: Follow up with a GET.
-* New ``strict_mode`` configuration to disable new redirect behavior.
-
-
-0.11.0 (2012-03-14)
-+++++++++++++++++++
-
-* Private SSL Certificate support
-* Remove select.poll from Gevent monkeypatching
-* Remove redundant generator for chunked transfer encoding
-* Fix: Response.ok raises Timeout Exception in safe_mode
-
-0.10.8 (2012-03-09)
-+++++++++++++++++++
-
-* Generate chunked ValueError fix
-* Proxy configuration by environment variables
-* Simplification of iter_lines.
-* New `trust_env` configuration for disabling system/environment hints.
-* Suppress cookie errors.
-
-0.10.7 (2012-03-07)
-+++++++++++++++++++
-
-* `encode_uri` = False
-
-0.10.6 (2012-02-25)
-+++++++++++++++++++
-
-* Allow '=' in cookies.
-
-0.10.5 (2012-02-25)
-+++++++++++++++++++
-
-* Response body with 0 content-length fix.
-* New async.imap.
-* Don't fail on netrc.
-
-
-0.10.4 (2012-02-20)
-+++++++++++++++++++
-
-* Honor netrc.
-
-0.10.3 (2012-02-20)
-+++++++++++++++++++
-
-* HEAD requests don't follow redirects anymore.
-* raise_for_status() doesn't raise for 3xx anymore.
-* Make Session objects picklable.
-* ValueError for invalid schema URLs.
-
-0.10.2 (2012-01-15)
-+++++++++++++++++++
-
-* Vastly improved URL quoting.
-* Additional allowed cookie key values.
-* Attempted fix for "Too many open files" Error
-* Replace unicode errors on first pass, no need for second pass.
-* Append '/' to bare-domain urls before query insertion.
-* Exceptions now inherit from RuntimeError.
-* Binary uploads + auth fix.
-* Bugfixes.
-
-
-0.10.1 (2012-01-23)
-+++++++++++++++++++
-
-* PYTHON 3 SUPPORT!
-* Dropped 2.5 Support. (*Backwards Incompatible*)
-
-0.10.0 (2012-01-21)
-+++++++++++++++++++
-
-* ``Response.content`` is now bytes-only. (*Backwards Incompatible*)
-* New ``Response.text`` is unicode-only.
-* If no ``Response.encoding`` is specified and ``chardet`` is available, ``Response.text`` will guess an encoding.
-* Default to ISO-8859-1 (Western) encoding for "text" subtypes.
-* Removal of `decode_unicode`. (*Backwards Incompatible*)
-* New multiple-hooks system.
-* New ``Response.register_hook`` for registering hooks within the pipeline.
-* ``Response.url`` is now Unicode.
-
-0.9.3 (2012-01-18)
-++++++++++++++++++
-
-* SSL verify=False bugfix (apparent on windows machines).
-
-0.9.2 (2012-01-18)
-++++++++++++++++++
-
-* Asynchronous async.send method.
-* Support for proper chunk streams with boundaries.
-* session argument for Session classes.
-* Print entire hook tracebacks, not just exception instance.
-* Fix response.iter_lines from pending next line.
-* Fix but in HTTP-digest auth w/ URI having query strings.
-* Fix in Event Hooks section.
-* Urllib3 update.
-
-
-0.9.1 (2012-01-06)
-++++++++++++++++++
-
-* danger_mode for automatic Response.raise_for_status()
-* Response.iter_lines refactor
-
-0.9.0 (2011-12-28)
-++++++++++++++++++
-
-* verify ssl is default.
-
-
-0.8.9 (2011-12-28)
-++++++++++++++++++
-
-* Packaging fix.
-
-
-0.8.8 (2011-12-28)
-++++++++++++++++++
-
-* SSL CERT VERIFICATION!
-* Release of Cerifi: Mozilla's cert list.
-* New 'verify' argument for SSL requests.
-* Urllib3 update.
-
-0.8.7 (2011-12-24)
-++++++++++++++++++
-
-* iter_lines last-line truncation fix
-* Force safe_mode for async requests
-* Handle safe_mode exceptions more consistently
-* Fix iteration on null responses in safe_mode
-
-0.8.6 (2011-12-18)
-++++++++++++++++++
-
-* Socket timeout fixes.
-* Proxy Authorization support.
-
-0.8.5 (2011-12-14)
-++++++++++++++++++
-
-* Response.iter_lines!
-
-0.8.4 (2011-12-11)
-++++++++++++++++++
-
-* Prefetch bugfix.
-* Added license to installed version.
-
-0.8.3 (2011-11-27)
-++++++++++++++++++
-
-* Converted auth system to use simpler callable objects.
-* New session parameter to API methods.
-* Display full URL while logging.
-
-0.8.2 (2011-11-19)
-++++++++++++++++++
-
-* New Unicode decoding system, based on over-ridable `Response.encoding`.
-* Proper URL slash-quote handling.
-* Cookies with ``[``, ``]``, and ``_`` allowed.
-
-0.8.1 (2011-11-15)
-++++++++++++++++++
-
-* URL Request path fix
-* Proxy fix.
-* Timeouts fix.
-
-0.8.0 (2011-11-13)
-++++++++++++++++++
-
-* Keep-alive support!
-* Complete removal of Urllib2
-* Complete removal of Poster
-* Complete removal of CookieJars
-* New ConnectionError raising
-* Safe_mode for error catching
-* prefetch parameter for request methods
-* OPTION method
-* Async pool size throttling
-* File uploads send real names
-* Vendored in urllib3
-
-0.7.6 (2011-11-07)
-++++++++++++++++++
-
-* Digest authentication bugfix (attach query data to path)
-
-0.7.5 (2011-11-04)
-++++++++++++++++++
-
-* Response.content = None if there was an invalid response.
-* Redirection auth handling.
-
-0.7.4 (2011-10-26)
-++++++++++++++++++
-
-* Session Hooks fix.
-
-0.7.3 (2011-10-23)
-++++++++++++++++++
-
-* Digest Auth fix.
-
-
-0.7.2 (2011-10-23)
-++++++++++++++++++
-
-* PATCH Fix.
-
-
-0.7.1 (2011-10-23)
-++++++++++++++++++
-
-* Move away from urllib2 authentication handling.
-* Fully Remove AuthManager, AuthObject, &c.
-* New tuple-based auth system with handler callbacks.
-
-
-0.7.0 (2011-10-22)
-++++++++++++++++++
-
-* Sessions are now the primary interface.
-* Deprecated InvalidMethodException.
-* PATCH fix.
-* New config system (no more global settings).
-
-
-0.6.6 (2011-10-19)
-++++++++++++++++++
-
-* Session parameter bugfix (params merging).
-
-
-0.6.5 (2011-10-18)
-++++++++++++++++++
-
-* Offline (fast) test suite.
-* Session dictionary argument merging.
-
-
-0.6.4 (2011-10-13)
-++++++++++++++++++
-
-* Automatic decoding of unicode, based on HTTP Headers.
-* New ``decode_unicode`` setting.
-* Removal of ``r.read/close`` methods.
-* New ``r.faw`` interface for advanced response usage.*
-* Automatic expansion of parameterized headers.
-
-
-0.6.3 (2011-10-13)
-++++++++++++++++++
-
-* Beautiful ``requests.async`` module, for making async requests w/ gevent.
-
-
-0.6.2 (2011-10-09)
-++++++++++++++++++
-
-* GET/HEAD obeys allow_redirects=False.
-
-
-0.6.1 (2011-08-20)
-++++++++++++++++++
-
-* Enhanced status codes experience ``\o/``
-* Set a maximum number of redirects (``settings.max_redirects``)
-* Full Unicode URL support
-* Support for protocol-less redirects.
-* Allow for arbitrary request types.
-* Bugfixes
-
-
-0.6.0 (2011-08-17)
-++++++++++++++++++
-
-* New callback hook system
-* New persistent sessions object and context manager
-* Transparent Dict-cookie handling
-* Status code reference object
-* Removed Response.cached
-* Added Response.request
-* All args are kwargs
-* Relative redirect support
-* HTTPError handling improvements
-* Improved https testing
-* Bugfixes
-
-
-0.5.1 (2011-07-23)
-++++++++++++++++++
-
-* International Domain Name Support!
-* Access headers without fetching entire body (``read()``)
-* Use lists as dicts for parameters
-* Add Forced Basic Authentication
-* Forced Basic is default authentication type
-* ``python-requests.org`` default User-Agent header
-* CaseInsensitiveDict lower-case caching
-* Response.history bugfix
-
-
-0.5.0 (2011-06-21)
-++++++++++++++++++
-
-* PATCH Support
-* Support for Proxies
-* HTTPBin Test Suite
-* Redirect Fixes
-* settings.verbose stream writing
-* Querystrings for all methods
-* URLErrors (Connection Refused, Timeout, Invalid URLs) are treated as explicitly raised
- ``r.requests.get('hwe://blah'); r.raise_for_status()``
-
-
-0.4.1 (2011-05-22)
-++++++++++++++++++
-
-* Improved Redirection Handling
-* New 'allow_redirects' param for following non-GET/HEAD Redirects
-* Settings module refactoring
-
-
-0.4.0 (2011-05-15)
-++++++++++++++++++
-
-* Response.history: list of redirected responses
-* Case-Insensitive Header Dictionaries!
-* Unicode URLs
-
-
-0.3.4 (2011-05-14)
-++++++++++++++++++
-
-* Urllib2 HTTPAuthentication Recursion fix (Basic/Digest)
-* Internal Refactor
-* Bytes data upload Bugfix
-
-
-
-0.3.3 (2011-05-12)
-++++++++++++++++++
-
-* Request timeouts
-* Unicode url-encoded data
-* Settings context manager and module
-
-
-0.3.2 (2011-04-15)
-++++++++++++++++++
-
-* Automatic Decompression of GZip Encoded Content
-* AutoAuth Support for Tupled HTTP Auth
-
-
-0.3.1 (2011-04-01)
-++++++++++++++++++
-
-* Cookie Changes
-* Response.read()
-* Poster fix
-
-
-0.3.0 (2011-02-25)
-++++++++++++++++++
-
-* Automatic Authentication API Change
-* Smarter Query URL Parameterization
-* Allow file uploads and POST data together
-* New Authentication Manager System
- - Simpler Basic HTTP System
- - Supports all build-in urllib2 Auths
- - Allows for custom Auth Handlers
-
-
-0.2.4 (2011-02-19)
-++++++++++++++++++
-
-* Python 2.5 Support
-* PyPy-c v1.4 Support
-* Auto-Authentication tests
-* Improved Request object constructor
-
-0.2.3 (2011-02-15)
-++++++++++++++++++
-
-* New HTTPHandling Methods
- - Response.__nonzero__ (false if bad HTTP Status)
- - Response.ok (True if expected HTTP Status)
- - Response.error (Logged HTTPError if bad HTTP Status)
- - Response.raise_for_status() (Raises stored HTTPError)
-
-
-0.2.2 (2011-02-14)
-++++++++++++++++++
-
-* Still handles request in the event of an HTTPError. (Issue #2)
-* Eventlet and Gevent Monkeypatch support.
-* Cookie Support (Issue #1)
-
-
-0.2.1 (2011-02-14)
-++++++++++++++++++
-
-* Added file attribute to POST and PUT requests for multipart-encode file uploads.
-* Added Request.url attribute for context and redirects
-
-
-0.2.0 (2011-02-14)
-++++++++++++++++++
-
-* Birth!
-
-
-0.0.1 (2011-02-13)
-++++++++++++++++++
-
-* Frustration
-* Conception
diff --git a/LICENSE b/LICENSE
index db78ea69f4..67db858821 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,13 +1,175 @@
-Copyright 2017 Kenneth Reitz
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
- http://www.apache.org/licenses/LICENSE-2.0
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
diff --git a/MANIFEST.in b/MANIFEST.in
index 2c0fb95ce9..9dd81e6f0f 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,2 +1,3 @@
-include README.rst LICENSE NOTICE HISTORY.rst pytest.ini requirements.txt
+include README.md LICENSE NOTICE HISTORY.md requirements-dev.txt
recursive-include tests *.py
+recursive-include tests/certs *
diff --git a/Makefile b/Makefile
index 317a7c76fb..5401f406d5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,28 +1,27 @@
.PHONY: docs
init:
- pip install pipenv --upgrade
- pipenv install --dev --skip-lock
+ python -m pip install -r requirements-dev.txt
test:
- # This runs all of the tests, on both Python 2 and Python 3.
- detox
+ python -m pytest tests
+
ci:
- pipenv run py.test -n 8 --boxed --junitxml=report.xml
+ python -m pytest tests --junitxml=report.xml
test-readme:
- @pipenv run python setup.py check --restructuredtext --strict && ([ $$? -eq 0 ] && echo "README.rst and HISTORY.rst ok") || echo "Invalid markup in README.rst or HISTORY.rst!"
-
-flake8:
- pipenv run flake8 --ignore=E501,F401,E128,E402,E731,F821 requests
+ python setup.py check --restructuredtext --strict && ([ $$? -eq 0 ] && echo "README.rst and HISTORY.rst ok") || echo "Invalid markup in README.rst or HISTORY.rst!"
coverage:
- pipenv run py.test --cov-config .coveragerc --verbose --cov-report term --cov-report xml --cov=requests tests
+ python -m pytest --cov-config .coveragerc --verbose --cov-report term --cov-report xml --cov=src/requests tests
+
+.publishenv:
+ python -m venv .publishenv
+ .publishenv/bin/pip install 'twine>=1.5.0' build
-publish:
- pip install 'twine>=1.5.0'
- python setup.py sdist bdist_wheel
- twine upload dist/*
+publish: .publishenv
+ .publishenv/bin/python -m build
+ .publishenv/bin/python -m twine upload --skip-existing dist/*
rm -fr build dist .egg requests.egg-info
docs:
cd docs && make html
- @echo "\033[95m\n\nBuild successful! View the docs homepage at docs/_build/html/index.html.\n\033[0m"
\ No newline at end of file
+ @echo "\033[95m\n\nBuild successful! View the docs homepage at docs/_build/html/index.html.\n\033[0m"
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000000..1ff62db688
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,2 @@
+Requests
+Copyright 2019 Kenneth Reitz
diff --git a/Pipfile b/Pipfile
deleted file mode 100644
index 51e8e8469f..0000000000
--- a/Pipfile
+++ /dev/null
@@ -1,24 +0,0 @@
-[[source]]
-url = "https://pypi.org/simple/"
-verify_ssl = true
-
-[dev-packages]
-
-pytest = ">=2.8.0"
-codecov = "*"
-"pytest-httpbin" = "==0.0.7"
-"pytest-mock" = "*"
-"pytest-cov" = "*"
-"pytest-xdist" = "*"
-alabaster = "*"
-"readme-renderer" = "*"
-sphinx = "<=1.5.5"
-pysocks = "*"
-docutils = "*"
-"flake8" = "*"
-tox = "*"
-detox = "*"
-httpbin = "==0.5.0"
-
-[packages]
-"e1839a8" = {path = ".", editable = true, extras=["socks"]}
\ No newline at end of file
diff --git a/Pipfile.lock b/Pipfile.lock
deleted file mode 100644
index fd9a1a10b3..0000000000
--- a/Pipfile.lock
+++ /dev/null
@@ -1,517 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "72b5a08e9c266b930d308024036e928e6b99ed4b7a50f22af377a463b7867a14"
- },
- "host-environment-markers": {
- "implementation_name": "cpython",
- "implementation_version": "3.6.2",
- "os_name": "posix",
- "platform_machine": "x86_64",
- "platform_python_implementation": "CPython",
- "platform_release": "16.7.0",
- "platform_system": "Darwin",
- "platform_version": "Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64",
- "python_full_version": "3.6.2",
- "python_version": "3.6",
- "sys_platform": "darwin"
- },
- "pipfile-spec": 6,
- "requires": {},
- "sources": [
- {
- "url": "https://pypi.python.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "certifi": {
- "hashes": [
- "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704",
- "sha256:40523d2efb60523e113b44602298f0960e900388cf3bb6043f645cf57ea9e3f5"
- ],
- "version": "==2017.7.27.1"
- },
- "chardet": {
- "hashes": [
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691",
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
- ],
- "version": "==3.0.4"
- },
- "e1839a8": {
- "editable": true,
- "extras": [
- "socks"
- ],
- "path": "."
- },
- "idna": {
- "hashes": [
- "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4",
- "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
- ],
- "version": "==2.6"
- },
- "pysocks": {
- "hashes": [
- "sha256:18842328a4e6061f084cfba70f6950d9140ecf7418b3df7cef558ebb217bac8d",
- "sha256:d00329f27efa157db7efe3ca26fcd69033cd61f83822461ee3f8a353b48e33cf"
- ],
- "version": "==1.6.7"
- },
- "urllib3": {
- "hashes": [
- "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
- "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
- ],
- "version": "==1.22"
- }
- },
- "develop": {
- "alabaster": {
- "hashes": [
- "sha256:2eef172f44e8d301d25aff8068fddd65f767a3f04b5f15b0f4922f113aa1c732",
- "sha256:37cdcb9e9954ed60912ebc1ca12a9d12178c26637abdf124e3cde2341c257fe0"
- ],
- "version": "==0.7.10"
- },
- "apipkg": {
- "hashes": [
- "sha256:65d2aa68b28e7d31233bb2ba8eb31cda40e4671f8ac2d6b241e358c9652a74b9",
- "sha256:2e38399dbe842891fe85392601aab8f40a8f4cc5a9053c326de35a1cc0297ac6"
- ],
- "version": "==1.4"
- },
- "babel": {
- "hashes": [
- "sha256:f20b2acd44f587988ff185d8949c3e208b4b3d5d20fcab7d91fe481ffa435528",
- "sha256:6007daf714d0cd5524bbe436e2d42b3c20e68da66289559341e48d2cd6d25811"
- ],
- "version": "==2.5.1"
- },
- "bleach": {
- "hashes": [
- "sha256:a6d9d5f5b7368c1689ad7f128af8e792beea23393688872b576c0271e6564a16",
- "sha256:b9522130003e4caedf4f00a39c120a906dcd4242329c1c8f621f5370203cbc30"
- ],
- "version": "==2.0.0"
- },
- "certifi": {
- "hashes": [
- "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704",
- "sha256:40523d2efb60523e113b44602298f0960e900388cf3bb6043f645cf57ea9e3f5"
- ],
- "version": "==2017.7.27.1"
- },
- "chardet": {
- "hashes": [
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691",
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
- ],
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
- "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
- ],
- "version": "==6.7"
- },
- "codecov": {
- "hashes": [
- "sha256:ad82f054837b02081f86ed1eb6c04cddc029fbc734eaf92ff73da1db3a79188b",
- "sha256:db1c182ca896244d8644d8410a33f6f6dd1cc24d80209907a65077445923f00c"
- ],
- "version": "==2.0.9"
- },
- "configparser": {
- "hashes": [
- "sha256:5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a"
- ],
- "version": "==3.5.0"
- },
- "coverage": {
- "hashes": [
- "sha256:c1456f66c536010cf9e4633a8853a9153e8fd588393695295afd4d0fc16c1d74",
- "sha256:97a7ec51cdde3a386e390b159b20f247ccb478084d925c75f1faa3d26c01335e",
- "sha256:83e955b975666b5a07d217135e7797857ce844eb340a99e46cc25525120417c4",
- "sha256:483ed14080c5301048128bb027b77978c632dd9e92e3ecb09b7e28f5b92abfcf",
- "sha256:ef574ab9640bcfa2f3c671831faf03f65788945fdf8efa4d4a1fffc034838e2a",
- "sha256:c5a205b4da3c624f5119dc4d84240789b5906bb8468902ec22dcc4aad8aa4638",
- "sha256:5dea90ed140e7fa9bc00463313f9bc4a6e6aff297b4969615e7a688615c4c4d2",
- "sha256:f9e83b39d29c2815a38e4118d776b482d4082b5bf9c9147fbc99a3f83abe480a",
- "sha256:700040c354f0230287906b1276635552a3def4b646e0145555bc9e2e5da9e365",
- "sha256:7f1eacae700c66c3d7362a433b228599c9d94a5a3a52613dddd9474e04deb6bc",
- "sha256:13ef9f799c8fb45c446a239df68034de3a6f3de274881b088bebd7f5661f79f8",
- "sha256:dfb011587e2b7299112f08a2a60d2601706aac9abde37aa1177ea825adaed923",
- "sha256:381be5d31d3f0d912334cf2c159bc7bea6bfe6b0e3df6061a3bf2bf88359b1f6",
- "sha256:83a477ac4f55a6ef59552683a0544d47b68a85ce6a80fd0ca6b3dc767f6495fb",
- "sha256:dfd35f1979da31bcabbe27bcf78d4284d69870731874af629082590023a77336",
- "sha256:9681efc2d310cfc53863cc6f63e88ebe7a48124550fa822147996cb09390b6ab",
- "sha256:53770b20ac5b4a12e99229d4bae57af0945be87cc257fce6c6c7571a39f0c5d4",
- "sha256:8801880d32f11b6df11c32a961e186774b4634ae39d7c43235f5a24368a85f07",
- "sha256:16db2c69a1acbcb3c13211e9f954e22b22a729909d81f983b6b9badacc466eda",
- "sha256:ef43a06a960b46c73c018704051e023ee6082030f145841ffafc8728039d5a88",
- "sha256:c3e2736664a6074fc9bd54fb643f5af0fc60bfedb2963b3d3f98c7450335e34c",
- "sha256:17709e22e4c9f5412ba90f446fb13b245cc20bf4a60377021bbff6c0f1f63e7c",
- "sha256:a2f7106d1167825c4115794c2ba57cc3b15feb6183db5328fa66f94c12902d8b",
- "sha256:2a08e978f402696c6956eee9d1b7e95d3ad042959b71bafe1f3e4557cbd6e0ac",
- "sha256:57f510bb16efaec0b6f371b64a8000c62e7e3b3e48e8b0a5745ade078d849814",
- "sha256:0f1883eab9c19aa243f51308751b8a2a547b9b817b721cc0ecf3efb99fafbea7",
- "sha256:e00fe141e22ce6e9395aa24d862039eb180c6b7e89df0bbaf9765e9aebe560a9",
- "sha256:ec596e4401553caa6dd2e3349ce47f9ef82c1f1bcba5d8ac3342724f0df8d6ff",
- "sha256:c820a533a943ebc860acc0ce6a00dd36e0fdf2c6f619ff8225755169428c5fa2",
- "sha256:b7f7283eb7badd2b8a9c6a9d6eeca200a0a24db6be79baee2c11398f978edcaa",
- "sha256:a5ed27ad3e8420b2d6b625dcbd3e59488c14ccc06030167bcf14ffb0f4189b77",
- "sha256:d7b70b7b4eb14d0753d33253fe4f121ca99102612e2719f0993607deb30c6f33",
- "sha256:4047dc83773869701bde934fb3c4792648eda7c0e008a77a0aec64157d246801",
- "sha256:7a9c44400ee0f3b4546066e0710e1250fd75831adc02ab99dda176ad8726f424",
- "sha256:0f649e68db74b1b5b8ca4161d08eb2b8fa8ae11af1ebfb80e80e112eb0ef5300",
- "sha256:52964fae0fafef8bd283ad8e9a9665205a9fdf912535434defc0ec3def1da26b",
- "sha256:36aa6c8db83bc27346ddcd8c2a60846a7178ecd702672689d3ea1828eb1a4d11",
- "sha256:9824e15b387d331c0fc0fef905a539ab69784368a1d6ac3db864b4182e520948",
- "sha256:4a678e1b9619a29c51301af61ab84122e2f8cc7a0a6b40854b808ac6be604300",
- "sha256:8bb7c8dca54109b61013bc4114d96effbf10dea136722c586bce3a5d9fc4e730",
- "sha256:1a41d621aa9b6ab6457b557a754d50aaff0813fad3453434de075496fca8a183",
- "sha256:0fa423599fc3d9e18177f913552cdb34a8d9ad33efcf52a98c9d4b644edb42c5",
- "sha256:e61a4ba0b2686040cb4828297c7e37bcaf3a1a1c0bc0dbe46cc789dde51a80fa",
- "sha256:ce9ef0fc99d11d418662e36fd8de6d71b19ec87c2eab961a117cc9d087576e72"
- ],
- "version": "==4.4.1"
- },
- "decorator": {
- "hashes": [
- "sha256:95a26b17806e284452bfd97fa20aa1e8cb4ee23542bda4dbac5e4562aa1642cd",
- "sha256:7cb64d38cb8002971710c8899fbdfb859a23a364b7c99dab19d1f719c2ba16b5"
- ],
- "version": "==4.1.2"
- },
- "detox": {
- "hashes": [
- "sha256:af0097ea01263f68f546826df69b9301458d6cec0ed278c53c01f9529fbd349e",
- "sha256:4719ca48c4ea5ffd908b1bc3d5d1b593b41e71dee17180d58d8a3e7e8f588d45"
- ],
- "version": "==0.11"
- },
- "docutils": {
- "hashes": [
- "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6",
- "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
- "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274"
- ],
- "version": "==0.14"
- },
- "enum-compat": {
- "hashes": [
- "sha256:939ceff18186a5762ae4db9fa7bfe017edbd03b66526b798dd8245394c8a4192"
- ],
- "version": "==0.0.2"
- },
- "enum34": {
- "hashes": [
- "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
- "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
- "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
- "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850"
- ],
- "version": "==1.1.6"
- },
- "eventlet": {
- "hashes": [
- "sha256:0a7d1e1d2f4dd2e0b2cb627dadf7a0f23de0eca88ba2d6af4229abe32a24dec9",
- "sha256:08faffab88c1b08bd53ea28bf084a572c89f7e7648bd9d71e6116ac17a51a15d"
- ],
- "version": "==0.21.0"
- },
- "execnet": {
- "hashes": [
- "sha256:d2b909c7945832e1c19cfacd96e78da68bdadc656440cfc7dfe59b766744eb8c",
- "sha256:f66dd4a7519725a1b7e14ad9ae7d3df8e09b2da88062386e08e941cafc0ef3e6"
- ],
- "version": "==1.4.1"
- },
- "flake8": {
- "hashes": [
- "sha256:f1a9d8886a9cbefb52485f4f4c770832c7fb569c084a9a314fb1eaa37c0c2c86",
- "sha256:c20044779ff848f67f89c56a0e4624c04298cd476e25253ac0c36f910a1a11d8"
- ],
- "version": "==3.4.1"
- },
- "flask": {
- "hashes": [
- "sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856",
- "sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1"
- ],
- "version": "==0.12.2"
- },
- "funcsigs": {
- "hashes": [
- "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca",
- "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
- ],
- "version": "==1.0.2"
- },
- "greenlet": {
- "hashes": [
- "sha256:96888e47898a471073b394ea641b7d675c1d054c580dd4a04a382bd34e67d89e",
- "sha256:d2d5103f6cba131e1be660230018e21f276911d2b68b629ead1c5cb5e5472ac7",
- "sha256:bc339de0e0969de5118d0b62a080a7611e2ba729a90f4a3ad78559c51bc5576d",
- "sha256:b8ab98f8ae25938326dc4c21e3689a933531500ae4f3bfcefe36e3e25fda4dbf",
- "sha256:416a3328d7e0a19aa1df3ec09524a109061fd7b80e010ef0dff9f695b4ac5e20",
- "sha256:21232907c8c26838b16915bd8fbbf82fc70c996073464cc70981dd4a96bc841c",
- "sha256:6803d8c6b235c861c50afddf00c7467ffbcd5ab960d137ff0f9c36f2cb11ee4b",
- "sha256:76dab055476dd4dabb00a967b4df1990b25542d17eaa40a18f66971d10193e0b",
- "sha256:70b9ff28921f5a3c03df4896ec8c55f5f94c593d7a79abd98b4c5c4a692ba873",
- "sha256:7114b757b4146f4c87a0f00f1e58abd4c4729836679af0fc37266910a4a72eb0",
- "sha256:0d90c709355ed13f16676f84e5a9cd67826a9f5c5143381c21e8fc3100ade1f1",
- "sha256:ebae83b6247f83b1e8d887733dfa8046ce6e29d8b3e2a7380256e9de5c6ae55d",
- "sha256:e841e3ece633acae5e2bf6102140a605ffee7d5d4921dca1625c5fdc0f0b3248",
- "sha256:3e5e9be157ece49e4f97f3225460caf758ccb00f934fcbc5db34367cc1ff0aee",
- "sha256:e77b708c37b652c7501b9f8f6056b23633c567aaa0d29edfef1c11673c64b949",
- "sha256:0da1fc809c3bdb93fbacd0f921f461aacd53e554a7b7d4e9953ba09131c4206e",
- "sha256:66fa5b101fcf4521138c1a29668074268d938bbb7de739c8faa9f92ea1f05e1f",
- "sha256:e5451e1ce06b74a4861576c2db74405a4398c4809a105774550a9e52cfc8c4da",
- "sha256:9c407aa6adfd4eea1232e81aa9f3cb3d9b955a9891c4819bf9b498c77efba14b",
- "sha256:b56ac981f07b77e72ad5154278b93396d706572ea52c2fce79fee2abfcc8bfa6",
- "sha256:e4c99c6010a5d153d481fdaf63b8a0782825c0721506d880403a3b9b82ae347e"
- ],
- "version": "==0.4.12"
- },
- "html5lib": {
- "hashes": [
- "sha256:b8934484cf22f1db684c0fae27569a0db404d0208d20163fbf51cc537245d008",
- "sha256:ee747c0ffd3028d2722061936b5c65ee4fe13c8e4613519b4447123fc4546298"
- ],
- "version": "==0.999999999"
- },
- "httpbin": {
- "hashes": [
- "sha256:710069973216d4bbf9ab6757f1e9a1f3be05832ce77da023adce0a98dfeecfee",
- "sha256:79fbc5d27e4194ea908b0fa18e09a59d95d287c91667aa69bcd010342d1589b5"
- ],
- "version": "==0.5.0"
- },
- "idna": {
- "hashes": [
- "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4",
- "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
- ],
- "version": "==2.6"
- },
- "imagesize": {
- "hashes": [
- "sha256:6ebdc9e0ad188f9d1b2cdd9bc59cbe42bf931875e829e7a595e6b3abdc05cdfb",
- "sha256:0ab2c62b87987e3252f89d30b7cedbec12a01af9274af9ffa48108f2c13c6062"
- ],
- "version": "==0.7.1"
- },
- "itsdangerous": {
- "hashes": [
- "sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519"
- ],
- "version": "==0.24"
- },
- "jinja2": {
- "hashes": [
- "sha256:2231bace0dfd8d2bf1e5d7e41239c06c9e0ded46e70cc1094a0aa64b0afeb054",
- "sha256:ddaa01a212cd6d641401cb01b605f4a4d9f37bfc93043d7f760ec70fb99ff9ff"
- ],
- "version": "==2.9.6"
- },
- "markupsafe": {
- "hashes": [
- "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
- ],
- "version": "==1.0"
- },
- "mccabe": {
- "hashes": [
- "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
- "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
- ],
- "version": "==0.6.1"
- },
- "mock": {
- "hashes": [
- "sha256:5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1",
- "sha256:b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"
- ],
- "version": "==2.0.0"
- },
- "pbr": {
- "hashes": [
- "sha256:60c25b7dfd054ef9bb0ae327af949dd4676aa09ac3a9471cdc871d8a9213f9ac",
- "sha256:05f61c71aaefc02d8e37c0a3eeb9815ff526ea28b3b76324769e6158d7f95be1"
- ],
- "version": "==3.1.1"
- },
- "pluggy": {
- "hashes": [
- "sha256:bd60171dbb250fdebafad46ed16d97065369da40568ae948ef7117eee8536e94"
- ],
- "version": "==0.5.2"
- },
- "py": {
- "hashes": [
- "sha256:2ccb79b01769d99115aa600d7eed99f524bf752bba8f041dc1c184853514655a",
- "sha256:0f2d585d22050e90c7d293b6451c83db097df77871974d90efd5a30dc12fcde3"
- ],
- "version": "==1.4.34"
- },
- "pycodestyle": {
- "hashes": [
- "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9",
- "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766"
- ],
- "version": "==2.3.1"
- },
- "pyflakes": {
- "hashes": [
- "sha256:cc5eadfb38041f8366128786b4ca12700ed05bbf1403d808e89d57d67a3875a7",
- "sha256:aa0d4dff45c0cc2214ba158d29280f8fa1129f3e87858ef825930845146337f4"
- ],
- "version": "==1.5.0"
- },
- "pygments": {
- "hashes": [
- "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
- "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"
- ],
- "version": "==2.2.0"
- },
- "pysocks": {
- "hashes": [
- "sha256:18842328a4e6061f084cfba70f6950d9140ecf7418b3df7cef558ebb217bac8d",
- "sha256:d00329f27efa157db7efe3ca26fcd69033cd61f83822461ee3f8a353b48e33cf"
- ],
- "version": "==1.6.7"
- },
- "pytest": {
- "hashes": [
- "sha256:b84f554f8ddc23add65c411bf112b2d88e2489fd45f753b1cae5936358bdf314",
- "sha256:f46e49e0340a532764991c498244a60e3a37d7424a532b3ff1a6a7653f1a403a"
- ],
- "version": "==3.2.2"
- },
- "pytest-cov": {
- "hashes": [
- "sha256:890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec",
- "sha256:03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d"
- ],
- "version": "==2.5.1"
- },
- "pytest-forked": {
- "hashes": [
- "sha256:f275cb48a73fc61a6710726348e1da6d68a978f0ec0c54ece5a5fae5977e5a08",
- "sha256:e4500cd0509ec4a26535f7d4112a8cc0f17d3a41c29ffd4eab479d2a55b30805"
- ],
- "version": "==0.2"
- },
- "pytest-httpbin": {
- "hashes": [
- "sha256:f430f0b5742a9d325148a3428f890f538f331cb7b244a49873cc322f838c85ea",
- "sha256:03af8a7055c8bbcb68b14d9a14c103c82c97aeb86a8f1b29cd63d83644c2f021"
- ],
- "version": "==0.0.7"
- },
- "pytest-mock": {
- "hashes": [
- "sha256:7ed6e7e8c636fd320927c5d73aedb77ac2eeb37196c3410e6176b7c92fdf2f69",
- "sha256:920d1167af5c2c2ad3fa0717d0c6c52e97e97810160c15721ac895cac53abb1c"
- ],
- "version": "==1.6.3"
- },
- "pytest-xdist": {
- "hashes": [
- "sha256:7924d45c2430191fe3679a58116c74ceea13307d7822c169d65fd59a24b3a4fe"
- ],
- "version": "==1.20.0"
- },
- "pytz": {
- "hashes": [
- "sha256:c883c2d6670042c7bc1688645cac73dd2b03193d1f7a6847b6154e96890be06d",
- "sha256:03c9962afe00e503e2d96abab4e8998a0f84d4230fa57afe1e0528473698cdd9",
- "sha256:487e7d50710661116325747a9cd1744d3323f8e49748e287bc9e659060ec6bf9",
- "sha256:43f52d4c6a0be301d53ebd867de05e2926c35728b3260157d274635a0a947f1c",
- "sha256:d1d6729c85acea5423671382868627129432fba9a89ecbb248d8d1c7a9f01c67",
- "sha256:54a935085f7bf101f86b2aff75bd9672b435f51c3339db2ff616e66845f2b8f9",
- "sha256:39504670abb5dae77f56f8eb63823937ce727d7cdd0088e6909e6dcac0f89043",
- "sha256:ddc93b6d41cfb81266a27d23a79e13805d4a5521032b512643af8729041a81b4",
- "sha256:f5c056e8f62d45ba8215e5cb8f50dfccb198b4b9fbea8500674f3443e4689589"
- ],
- "version": "==2017.2"
- },
- "readme-renderer": {
- "hashes": [
- "sha256:c9637bfcf1ff40f7683b3439f4b97eb0f9a1cffc2a1fad5fa01debd667ddb111",
- "sha256:9deab442963a63a71ab494bf581b1c844473995a2357f4b3228a1df1c8cba8da"
- ],
- "version": "==17.2"
- },
- "requests": {
- "hashes": [
- "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
- "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
- ],
- "version": "==2.18.4"
- },
- "six": {
- "hashes": [
- "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb",
- "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"
- ],
- "version": "==1.11.0"
- },
- "snowballstemmer": {
- "hashes": [
- "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89",
- "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128"
- ],
- "version": "==1.2.1"
- },
- "sphinx": {
- "hashes": [
- "sha256:11f271e7a9398385ed730e90f0bb41dc3815294bdcd395b46ed2d033bc2e7d87",
- "sha256:4064ea6c56feeb268838cb8fbbee507d0c3d5d92fa63a7df935a916b52c9e2f5"
- ],
- "version": "==1.5.5"
- },
- "tox": {
- "hashes": [
- "sha256:49d88f2c217352c499450e9f61ca82fd9c8873d01a45555bb342a32f2b6753a2",
- "sha256:d9c279e707d2cfef8d77d10f13b38b3e68b7e470018b45747560f6c3c66d6b83"
- ],
- "version": "==2.8.2"
- },
- "urllib3": {
- "hashes": [
- "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
- "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
- ],
- "version": "==1.22"
- },
- "virtualenv": {
- "hashes": [
- "sha256:39d88b533b422825d644087a21e78c45cf5af0ef7a99a1fc9fbb7b481e5c85b0",
- "sha256:02f8102c2436bb03b3ee6dede1919d1dac8a427541652e5ec95171ec8adbc93a"
- ],
- "version": "==15.1.0"
- },
- "webencodings": {
- "hashes": [
- "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
- "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
- ],
- "version": "==0.5.1"
- },
- "werkzeug": {
- "hashes": [
- "sha256:e8549c143af3ce6559699a01e26fa4174f4c591dbee0a499f3cd4c3781cdec3d",
- "sha256:903a7b87b74635244548b30d30db4c8947fe64c5198f58899ddcd3a13c23bb26"
- ],
- "version": "==0.12.2"
- }
- }
-}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..74adab80dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,78 @@
+# Requests
+
+**Requests** is a simple, yet elegant, HTTP library.
+
+```python
+>>> import requests
+>>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
+>>> r.status_code
+200
+>>> r.headers['content-type']
+'application/json; charset=utf8'
+>>> r.encoding
+'utf-8'
+>>> r.text
+'{"authenticated": true, ...'
+>>> r.json()
+{'authenticated': True, ...}
+```
+
+Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!
+
+Requests is one of the most downloaded Python packages today, pulling in around `30M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `1,000,000+` repositories. You may certainly put your trust in this code.
+
+[](https://pepy.tech/project/requests)
+[](https://pypi.org/project/requests)
+[](https://github.com/psf/requests/graphs/contributors)
+
+## Installing Requests and Supported Versions
+
+Requests is available on PyPI:
+
+```console
+$ python -m pip install requests
+```
+
+Requests officially supports Python 3.9+.
+
+## Supported Features & Best–Practices
+
+Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today.
+
+- Keep-Alive & Connection Pooling
+- International Domains and URLs
+- Sessions with Cookie Persistence
+- Browser-style TLS/SSL Verification
+- Basic & Digest Authentication
+- Familiar `dict`–like Cookies
+- Automatic Content Decompression and Decoding
+- Multi-part File Uploads
+- SOCKS Proxy Support
+- Connection Timeouts
+- Streaming Downloads
+- Automatic honoring of `.netrc`
+- Chunked HTTP Requests
+
+## API Reference and User Guide available on [Read the Docs](https://requests.readthedocs.io)
+
+[](https://requests.readthedocs.io)
+
+## Cloning the repository
+
+When cloning the Requests repository, you may need to add the `-c
+fetch.fsck.badTimezone=ignore` flag to avoid an error about a bad commit timestamp (see
+[this issue](https://github.com/psf/requests/issues/2690) for more background):
+
+```shell
+git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git
+```
+
+You can also apply this setting to your global Git config:
+
+```shell
+git config --global fetch.fsck.badTimezone ignore
+```
+
+---
+
+[](https://kennethreitz.org) [](https://www.python.org/psf)
diff --git a/README.rst b/README.rst
deleted file mode 100644
index d65fd9479b..0000000000
--- a/README.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-Requests: HTTP for Humans
-=========================
-
-.. image:: https://img.shields.io/pypi/v/requests.svg
- :target: https://pypi.org/project/requests/
-
-.. image:: https://img.shields.io/pypi/l/requests.svg
- :target: https://pypi.org/project/requests/
-
-.. image:: https://img.shields.io/pypi/pyversions/requests.svg
- :target: https://pypi.org/project/requests/
-
-.. image:: https://codecov.io/github/requests/requests/coverage.svg?branch=master
- :target: https://codecov.io/github/requests/requests
- :alt: codecov.io
-
-.. image:: https://img.shields.io/github/contributors/requests/requests.svg
- :target: https://github.com/requests/requests/graphs/contributors
-
-.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg
- :target: https://saythanks.io/to/kennethreitz
-
-Requests is the only *Non-GMO* HTTP library for Python, safe for human
-consumption.
-
-.. image:: https://farm5.staticflickr.com/4317/35198386374_1939af3de6_k_d.jpg
-
-Behold, the power of Requests:
-
-.. code-block:: python
-
- >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
- >>> r.status_code
- 200
- >>> r.headers['content-type']
- 'application/json; charset=utf8'
- >>> r.encoding
- 'utf-8'
- >>> r.text
- u'{"type":"User"...'
- >>> r.json()
- {u'disk_usage': 368627, u'private_gists': 484, ...}
-
-See `the similar code, sans Requests `_.
-
-.. image:: https://raw.githubusercontent.com/requests/requests/master/docs/_static/requests-logo-small.png
- :target: http://docs.python-requests.org/
-
-
-Requests allows you to send *organic, grass-fed* HTTP/1.1 requests, without the
-need for manual labor. There's no need to manually add query strings to your
-URLs, or to form-encode your POST data. Keep-alive and HTTP connection pooling
-are 100% automatic, thanks to `urllib3 `_.
-
-Besides, all the cool kids are doing it. Requests is one of the most
-downloaded Python packages of all time, pulling in over 11,000,000 downloads
-every month. You don't want to be left out!
-
-Feature Support
----------------
-
-Requests is ready for today's web.
-
-- International Domains and URLs
-- Keep-Alive & Connection Pooling
-- Sessions with Cookie Persistence
-- Browser-style SSL Verification
-- Basic/Digest Authentication
-- Elegant Key/Value Cookies
-- Automatic Decompression
-- Automatic Content Decoding
-- Unicode Response Bodies
-- Multipart File Uploads
-- HTTP(S) Proxy Support
-- Connection Timeouts
-- Streaming Downloads
-- ``.netrc`` Support
-- Chunked Requests
-
-Requests officially supports Python 2.6–2.7 & 3.4–3.6, and runs great on PyPy.
-
-Installation
-------------
-
-To install Requests, simply use `pipenv `_ (or pip, of course):
-
-.. code-block:: bash
-
- $ pipenv install requests
- ✨🍰✨
-
-Satisfaction guaranteed.
-
-Documentation
--------------
-
-Fantastic documentation is available at http://docs.python-requests.org/, for a limited time only.
-
-
-How to Contribute
------------------
-
-#. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a `Contributor Friendly`_ tag for issues that should be ideal for people who are not very familiar with the codebase yet.
-#. Fork `the repository`_ on GitHub to start making your changes to the **master** branch (or branch off of it).
-#. Write a test which shows that the bug was fixed or that the feature works as expected.
-#. Send a pull request and bug the maintainer until it gets merged and published. :) Make sure to add yourself to AUTHORS_.
-
-.. _`the repository`: https://github.com/requests/requests
-.. _AUTHORS: https://github.com/requests/requests/blob/master/AUTHORS.rst
-.. _Contributor Friendly: https://github.com/requests/requests/issues?direction=desc&labels=Contributor+Friendly&page=1&sort=updated&state=open
diff --git a/_appveyor/install.ps1 b/_appveyor/install.ps1
deleted file mode 100644
index 94d6f01813..0000000000
--- a/_appveyor/install.ps1
+++ /dev/null
@@ -1,229 +0,0 @@
-# Sample script to install Python and pip under Windows
-# Authors: Olivier Grisel, Jonathan Helmus, Kyle Kastner, and Alex Willmer
-# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
-
-$MINICONDA_URL = "http://repo.continuum.io/miniconda/"
-$BASE_URL = "https://www.python.org/ftp/python/"
-$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py"
-$GET_PIP_PATH = "C:\get-pip.py"
-
-$PYTHON_PRERELEASE_REGEX = @"
-(?x)
-(?\d+)
-\.
-(?\d+)
-\.
-(?\d+)
-(?[a-z]{1,2}\d+)
-"@
-
-
-function Download ($filename, $url) {
- $webclient = New-Object System.Net.WebClient
-
- $basedir = $pwd.Path + "\"
- $filepath = $basedir + $filename
- if (Test-Path $filename) {
- Write-Host "Reusing" $filepath
- return $filepath
- }
-
- # Download and retry up to 3 times in case of network transient errors.
- Write-Host "Downloading" $filename "from" $url
- $retry_attempts = 2
- for ($i = 0; $i -lt $retry_attempts; $i++) {
- try {
- $webclient.DownloadFile($url, $filepath)
- break
- }
- Catch [Exception]{
- Start-Sleep 1
- }
- }
- if (Test-Path $filepath) {
- Write-Host "File saved at" $filepath
- } else {
- # Retry once to get the error message if any at the last try
- $webclient.DownloadFile($url, $filepath)
- }
- return $filepath
-}
-
-
-function ParsePythonVersion ($python_version) {
- if ($python_version -match $PYTHON_PRERELEASE_REGEX) {
- return ([int]$matches.major, [int]$matches.minor, [int]$matches.micro,
- $matches.prerelease)
- }
- $version_obj = [version]$python_version
- return ($version_obj.major, $version_obj.minor, $version_obj.build, "")
-}
-
-
-function DownloadPython ($python_version, $platform_suffix) {
- $major, $minor, $micro, $prerelease = ParsePythonVersion $python_version
-
- if (($major -le 2 -and $micro -eq 0) `
- -or ($major -eq 3 -and $minor -le 2 -and $micro -eq 0) `
- ) {
- $dir = "$major.$minor"
- $python_version = "$major.$minor$prerelease"
- } else {
- $dir = "$major.$minor.$micro"
- }
-
- if ($prerelease) {
- if (($major -le 2) `
- -or ($major -eq 3 -and $minor -eq 1) `
- -or ($major -eq 3 -and $minor -eq 2) `
- -or ($major -eq 3 -and $minor -eq 3) `
- ) {
- $dir = "$dir/prev"
- }
- }
-
- if (($major -le 2) -or ($major -le 3 -and $minor -le 4)) {
- $ext = "msi"
- if ($platform_suffix) {
- $platform_suffix = ".$platform_suffix"
- }
- } else {
- $ext = "exe"
- if ($platform_suffix) {
- $platform_suffix = "-$platform_suffix"
- }
- }
-
- $filename = "python-$python_version$platform_suffix.$ext"
- $url = "$BASE_URL$dir/$filename"
- $filepath = Download $filename $url
- return $filepath
-}
-
-
-function InstallPython ($python_version, $architecture, $python_home) {
- Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
- if (Test-Path $python_home) {
- Write-Host $python_home "already exists, skipping."
- return $false
- }
- if ($architecture -eq "32") {
- $platform_suffix = ""
- } else {
- $platform_suffix = "amd64"
- }
- $installer_path = DownloadPython $python_version $platform_suffix
- $installer_ext = [System.IO.Path]::GetExtension($installer_path)
- Write-Host "Installing $installer_path to $python_home"
- $install_log = $python_home + ".log"
- if ($installer_ext -eq '.msi') {
- InstallPythonMSI $installer_path $python_home $install_log
- } else {
- InstallPythonEXE $installer_path $python_home $install_log
- }
- if (Test-Path $python_home) {
- Write-Host "Python $python_version ($architecture) installation complete"
- } else {
- Write-Host "Failed to install Python in $python_home"
- Get-Content -Path $install_log
- Exit 1
- }
-}
-
-
-function InstallPythonEXE ($exepath, $python_home, $install_log) {
- $install_args = "/quiet InstallAllUsers=1 TargetDir=$python_home"
- RunCommand $exepath $install_args
-}
-
-
-function InstallPythonMSI ($msipath, $python_home, $install_log) {
- $install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home"
- $uninstall_args = "/qn /x $msipath"
- RunCommand "msiexec.exe" $install_args
- if (-not(Test-Path $python_home)) {
- Write-Host "Python seems to be installed else-where, reinstalling."
- RunCommand "msiexec.exe" $uninstall_args
- RunCommand "msiexec.exe" $install_args
- }
-}
-
-function RunCommand ($command, $command_args) {
- Write-Host $command $command_args
- Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru
-}
-
-
-function InstallPip ($python_home) {
- $pip_path = $python_home + "\Scripts\pip.exe"
- $python_path = $python_home + "\python.exe"
- if (-not(Test-Path $pip_path)) {
- Write-Host "Installing pip..."
- $webclient = New-Object System.Net.WebClient
- $webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH)
- Write-Host "Executing:" $python_path $GET_PIP_PATH
- & $python_path $GET_PIP_PATH
- } else {
- Write-Host "pip already installed."
- }
-}
-
-
-function DownloadMiniconda ($python_version, $platform_suffix) {
- if ($python_version -eq "3.4") {
- $filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe"
- } else {
- $filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe"
- }
- $url = $MINICONDA_URL + $filename
- $filepath = Download $filename $url
- return $filepath
-}
-
-
-function InstallMiniconda ($python_version, $architecture, $python_home) {
- Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
- if (Test-Path $python_home) {
- Write-Host $python_home "already exists, skipping."
- return $false
- }
- if ($architecture -eq "32") {
- $platform_suffix = "x86"
- } else {
- $platform_suffix = "x86_64"
- }
- $filepath = DownloadMiniconda $python_version $platform_suffix
- Write-Host "Installing" $filepath "to" $python_home
- $install_log = $python_home + ".log"
- $args = "/S /D=$python_home"
- Write-Host $filepath $args
- Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru
- if (Test-Path $python_home) {
- Write-Host "Python $python_version ($architecture) installation complete"
- } else {
- Write-Host "Failed to install Python in $python_home"
- Get-Content -Path $install_log
- Exit 1
- }
-}
-
-
-function InstallMinicondaPip ($python_home) {
- $pip_path = $python_home + "\Scripts\pip.exe"
- $conda_path = $python_home + "\Scripts\conda.exe"
- if (-not(Test-Path $pip_path)) {
- Write-Host "Installing pip..."
- $args = "install --yes pip"
- Write-Host $conda_path $args
- Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
- } else {
- Write-Host "pip already installed."
- }
-}
-
-function main () {
- InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON
- InstallPip $env:PYTHON
-}
-
-main
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 8c84a9f3d5..0000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-# AppVeyor.yml from https://github.com/ogrisel/python-appveyor-demo
-# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
-
-build: off
-
-environment:
- matrix:
- - PYTHON: "C:\\Python27-x64"
- PYTHON_VERSION: "2.7.x"
- PYTHON_ARCH: "64"
- TOXENV: "py27"
-
- - PYTHON: "C:\\Python34-x64"
- PYTHON_VERSION: "3.4.x"
- PYTHON_ARCH: "64"
- TOXENV: "py34"
-
- - PYTHON: "C:\\Python35-x64"
- PYTHON_VERSION: "3.5.x"
- PYTHON_ARCH: "64"
- TOXENV: "py35"
-
- - PYTHON: "C:\\Python36-x64"
- PYTHON_VERSION: "3.6.x"
- PYTHON_ARCH: "64"
- TOXENV: "py36"
-
-install:
- # Install Python (from the official .msi of http://python.org) and pip when
- # not already installed.
- - ps: if (-not(Test-Path($env:PYTHON))) { & _appveyor\install.ps1 }
-
- # Prepend newly installed Python to the PATH of this build (this cannot be
- # done from inside the powershell script as it would require to restart
- # the parent CMD process).
- - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
-
- # Check that we have the expected version and architecture for Python
- - "python --version"
- - "python -c \"import struct; print(struct.calcsize('P') * 8)\""
-
- # Upgrade to the latest version of pip to avoid it displaying warnings
- # about it being out of date.
- - "python -m pip install --upgrade pip wheel"
- - "C:\\MinGW\\bin\\mingw32-make"
-
-test_script:
- - "C:\\MinGW\\bin\\mingw32-make coverage"
-
-on_success:
- - "pipenv run codecov -f coverage.xml"
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/docs/.nojekyll
@@ -0,0 +1 @@
+
diff --git a/docs/_static/custom.css b/docs/_static/custom.css
index 54def686eb..465e8a9a60 100644
--- a/docs/_static/custom.css
+++ b/docs/_static/custom.css
@@ -6,15 +6,16 @@ body > div.document > div.sphinxsidebar > div > form > table > tbody > tr:nth-ch
color: white;
}
+/* Carbon by BuySellAds */
#carbonads {
display: block;
overflow: hidden;
+ margin: 1.5em 0 2em;
padding: 1em;
- background-color: #eeeeee;
- text-align: center;
border: solid 1px #cccccc;
- margin: 1.5em 0 2em;
border-radius: 2px;
+ background-color: #eeeeee;
+ text-align: center;
line-height: 1.5;
}
@@ -42,6 +43,135 @@ body > div.document > div.sphinxsidebar > div > form > table > tbody > tr:nth-ch
display: block;
text-transform: uppercase;
letter-spacing: 1px;
+ font-size: 10px;
line-height: 1;
+}
+
+
+/* Native CPC by BuySellAds */
+
+#native-ribbon #_custom_ {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ box-shadow: 0 -1px 4px 1px hsla(0, 0%, 0%, .15);
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu,
+ Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ transition: all .25s ease-in-out;
+ transform: translateY(calc(100% - 35px));
+
+ flex-flow: column nowrap;
+}
+
+#native-ribbon #_custom_:hover {
+ transform: translateY(0);
+}
+
+.native-img {
+ margin-right: 20px;
+ max-height: 50px;
+ border-radius: 3px;
+}
+
+.native-sponsor {
+ margin: 10px 20px;
+ text-align: center;
+ text-transform: uppercase;
+ letter-spacing: .5px;
+ font-size: 12px;
+ transition: all .3s ease-in-out;
+ transform-origin: left;
+}
+
+#native-ribbon #_custom_:hover .native-sponsor {
+ margin: 0 20px;
+ opacity: 0;
+ transform: scaleY(0);
+}
+
+.native-flex {
+ display: flex;
+ padding: 10px 20px 25px;
+ text-decoration: none;
+
+ flex-flow: row nowrap;
+ justify-content: center;
+ align-items: center;
+}
+
+.native-main {
+ display: flex;
+
+ flex-flow: row nowrap;
+ align-items: center;
+}
+
+.native-details {
+ display: flex;
+ margin-right: 30px;
+
+ flex-flow: column nowrap;
+}
+
+.native-company {
+ margin-bottom: 4px;
+ text-transform: uppercase;
+ letter-spacing: 2px;
font-size: 10px;
}
+
+.native-desc {
+ letter-spacing: 1px;
+ font-weight: 300;
+ font-size: 14px;
+ line-height: 1.4;
+}
+
+.native-cta {
+ padding: 10px 14px;
+ border-radius: 3px;
+ box-shadow: 0 6px 13px 0 hsla(0, 0%, 0%, .15);
+ text-transform: uppercase;
+ white-space: nowrap;
+ letter-spacing: 1px;
+ font-weight: 400;
+ font-size: 12px;
+ transition: all .3s ease-in-out;
+ transform: translateY(-1px);
+}
+
+.native-cta:hover {
+ box-shadow: none;
+ transform: translateY(1px);
+}
+
+@media only screen and (min-width: 320px) and (max-width: 759px) {
+ .native-flex {
+ padding: 5px 5px 15px;
+ flex-direction: column;
+
+ flex-wrap: wrap;
+ }
+
+ .native-img {
+ margin: 0;
+ display: none;
+ }
+
+ .native-details {
+ margin: 0;
+ }
+
+ .native-main {
+ flex-direction: column;
+ text-align: left;
+
+ flex-wrap: wrap;
+ align-content: center;
+ }
+
+ .native-cta {
+ display: none;
+ }
+}
diff --git a/docs/_static/konami.js b/docs/_static/konami.js
deleted file mode 100644
index d72cf9df89..0000000000
--- a/docs/_static/konami.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Konami-JS ~
- * :: Now with support for touch events and multiple instances for
- * :: those situations that call for multiple easter eggs!
- * Code: http://konami-js.googlecode.com/
- * Examples: http://www.snaptortoise.com/konami-js
- * Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)
- * Version: 1.4.2 (9/2/2013)
- * Licensed under the MIT License (http://opensource.org/licenses/MIT)
- * Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1 and Dolphin Browser
- */
-
-var Konami = function (callback) {
- var konami = {
- addEvent: function (obj, type, fn, ref_obj) {
- if (obj.addEventListener)
- obj.addEventListener(type, fn, false);
- else if (obj.attachEvent) {
- // IE
- obj["e" + type + fn] = fn;
- obj[type + fn] = function () {
- obj["e" + type + fn](window.event, ref_obj);
- };
- obj.attachEvent("on" + type, obj[type + fn]);
- }
- },
- input: "",
- pattern: "38384040373937396665",
- load: function (link) {
- this.addEvent(document, "keydown", function (e, ref_obj) {
- if (ref_obj) konami = ref_obj; // IE
- konami.input += e ? e.keyCode : event.keyCode;
- if (konami.input.length > konami.pattern.length)
- konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
- if (konami.input == konami.pattern) {
- konami.code(link);
- konami.input = "";
- e.preventDefault();
- return false;
- }
- }, this);
- this.iphone.load(link);
- },
- code: function (link) {
- window.location = link
- },
- iphone: {
- start_x: 0,
- start_y: 0,
- stop_x: 0,
- stop_y: 0,
- tapTolerance: 8,
- capture: false,
- orig_keys: "",
- keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
- code: function (link) {
- konami.code(link);
- },
- touchCapture: function(evt) {
- konami.iphone.start_x = evt.changedTouches[0].pageX;
- konami.iphone.start_y = evt.changedTouches[0].pageY;
- konami.iphone.capture = true;
- },
- load: function (link) {
- this.orig_keys = this.keys;
- konami.addEvent(document, "touchmove", function (e) {
- if (e.touches.length == 1 && konami.iphone.capture == true) {
- var touch = e.touches[0];
- konami.iphone.stop_x = touch.pageX;
- konami.iphone.stop_y = touch.pageY;
- konami.iphone.check_direction();
- }
- });
- konami.addEvent(document, "touchend", function (evt) {
- konami.touchCapture(evt);
- konami.iphone.check_direction(link);
- }, false);
- konami.addEvent(document, "touchstart", function (evt) {
- konami.touchCapture(evt);
- });
- },
- check_direction: function (link) {
- var x_magnitude = Math.abs(this.start_x - this.stop_x);
- var y_magnitude = Math.abs(this.start_y - this.stop_y);
- var hasMoved = (x_magnitude > this.tapTolerance || y_magnitude > this.tapTolerance);
- var result;
- if (this.capture === true && hasMoved) {
- this.capture = false;
- var x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
- var y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
- var result = (x_magnitude > y_magnitude) ? x : y;
- }
- else if (this.capture === false && !hasMoved) {
- result = (this.tap == true) ? "TAP" : result;
- result = "TAP";
- }
- if (result) {
- if (result == this.keys[0]) this.keys = this.keys.slice(1, this.keys.length);
- else this.keys = this.orig_keys;
- }
- if (this.keys.length == 0) {
- this.keys = this.orig_keys;
- this.code(link);
- }
- }
- }
- }
-
- typeof callback === "string" && konami.load(callback);
- if (typeof callback === "function") {
- konami.code = callback;
- konami.load();
- }
-
- return konami;
-};
diff --git a/docs/_static/requests-logo-small.png b/docs/_static/requests-logo-small.png
deleted file mode 100644
index afadeaa4f6..0000000000
Binary files a/docs/_static/requests-logo-small.png and /dev/null differ
diff --git a/docs/_templates/hacks.html b/docs/_templates/hacks.html
index c3fe2d1ea6..eca5dffcb5 100644
--- a/docs/_templates/hacks.html
+++ b/docs/_templates/hacks.html
@@ -1,33 +1,4 @@
-
-
-
-
-
-
+
-
-
-
+
-
-
-
+
+
-
-
-
\ No newline at end of file
diff --git a/docs/_templates/sidebarintro.html b/docs/_templates/sidebarintro.html
index bdb1c02430..607bf92c4e 100644
--- a/docs/_templates/sidebarintro.html
+++ b/docs/_templates/sidebarintro.html
@@ -1,11 +1,11 @@
-
+
-
@@ -13,59 +13,25 @@
Requests is an elegant and simple HTTP library for Python, built for
human beings.
-Sponsored by Linode and other wonderful organizations.
-
-
-
-Requests Stickers!
-Stay Informed
-Receive updates on new releases and upcoming projects.
-
-
-
-
-Join Mailing List.
-Other Projects
-
-More Kenneth Reitz projects:
+Useful Links
+ Quickstart
+ Advanced Usage
+ API Reference
+ Release History
+ Contributors Guide
+
-Useful Links
-
-
-Translations
-
-
+
+
diff --git a/docs/_templates/sidebarlogo.html b/docs/_templates/sidebarlogo.html
index 1b7afbd805..71eb82e726 100644
--- a/docs/_templates/sidebarlogo.html
+++ b/docs/_templates/sidebarlogo.html
@@ -1,65 +1,30 @@
-
-
-
-
-
-
+
-
Requests is an elegant and simple HTTP library for Python, built for
human beings. You are currently looking at the documentation of the
development release.
-Sponsored by Linode and other wonderful organizations.
-
-Stay Informed
-Receive updates on new releases and upcoming projects.
-
-Requests Stickers!
-
-Join Mailing List.
-
-
-
-
-
-
+Useful Links
+