89 lines
3.3 KiB
ReStructuredText
89 lines
3.3 KiB
ReStructuredText
|
.. _faq:
|
||
|
|
||
|
Frequently Asked Questions
|
||
|
==========================
|
||
|
|
||
|
This part of the documentation answers common questions about Requests.
|
||
|
|
||
|
Encoded Data?
|
||
|
-------------
|
||
|
|
||
|
Requests automatically decompresses gzip-encoded responses, and does
|
||
|
its best to decode response content to unicode when possible.
|
||
|
|
||
|
You can get direct access to the raw response (and even the socket),
|
||
|
if needed as well.
|
||
|
|
||
|
|
||
|
Custom User-Agents?
|
||
|
-------------------
|
||
|
|
||
|
Requests allows you to easily override User-Agent strings, along with
|
||
|
any other HTTP Header.
|
||
|
|
||
|
|
||
|
Why not Httplib2?
|
||
|
-----------------
|
||
|
|
||
|
Chris Adams gave an excellent summary on
|
||
|
`Hacker News <http://news.ycombinator.com/item?id=2884406>`_:
|
||
|
|
||
|
httplib2 is part of why you should use requests: it's far more respectable
|
||
|
as a client but not as well documented and it still takes way too much code
|
||
|
for basic operations. I appreciate what httplib2 is trying to do, that
|
||
|
there's a ton of hard low-level annoyances in building a modern HTTP
|
||
|
client, but really, just use requests instead. Kenneth Reitz is very
|
||
|
motivated and he gets the degree to which simple things should be simple
|
||
|
whereas httplib2 feels more like an academic exercise than something
|
||
|
people should use to build production systems[1].
|
||
|
|
||
|
Disclosure: I'm listed in the requests AUTHORS file but can claim credit
|
||
|
for, oh, about 0.0001% of the awesomeness.
|
||
|
|
||
|
1. http://code.google.com/p/httplib2/issues/detail?id=96 is a good example:
|
||
|
an annoying bug which affect many people, there was a fix available for
|
||
|
months, which worked great when I applied it in a fork and pounded a couple
|
||
|
TB of data through it, but it took over a year to make it into trunk and
|
||
|
even longer to make it onto PyPI where any other project which required "
|
||
|
httplib2" would get the working version.
|
||
|
|
||
|
|
||
|
Python 3 Support?
|
||
|
-----------------
|
||
|
|
||
|
Yes! Here's a list of Python platforms that are officially
|
||
|
supported:
|
||
|
|
||
|
* Python 2.6
|
||
|
* Python 2.7
|
||
|
* Python 3.1
|
||
|
* Python 3.2
|
||
|
* Python 3.3
|
||
|
* Python 3.4
|
||
|
* PyPy 1.9
|
||
|
* PyPy 2.2
|
||
|
|
||
|
What are "hostname doesn't match" errors?
|
||
|
-----------------------------------------
|
||
|
|
||
|
These errors occur when :ref:`SSL certificate verification <verification>`
|
||
|
fails to match the certificate the server responds with to the hostname
|
||
|
Requests thinks it's contacting. If you're certain the server's SSL setup is
|
||
|
correct (for example, because you can visit the site with your browser) and
|
||
|
you're using Python 2.6 or 2.7, a possible explanation is that you need
|
||
|
Server-Name-Indication.
|
||
|
|
||
|
`Server-Name-Indication`_, or SNI, is an official extension to SSL where the
|
||
|
client tells the server what hostname it is contacting. This is important
|
||
|
when servers are using `Virtual Hosting`_. When such servers are hosting
|
||
|
more than one SSL site they need to be able to return the appropriate
|
||
|
certificate based on the hostname the client is connecting to.
|
||
|
|
||
|
Python3's SSL module includes native support for SNI. This support has not been
|
||
|
back ported to Python2. For information on using SNI with Requests on Python2
|
||
|
refer to this `Stack Overflow answer`_.
|
||
|
|
||
|
.. _`Server-Name-Indication`: https://en.wikipedia.org/wiki/Server_Name_Indication
|
||
|
.. _`virtual hosting`: https://en.wikipedia.org/wiki/Virtual_hosting
|
||
|
.. _`Stack Overflow answer`: https://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support/18579484#18579484
|