.. _grab_http_headers: Work with HTTP Headers ====================== Custom headers -------------- If you need to submit custom HTTP headers, you can specify any number of them via :ref:`option_headers` option. A common case is to emulate an AJAX request:: >>> g = Grab() >>> g.setup(headers={'X-Requested-With': 'XMLHttpRequest'}) Bear in mind, that except headers in :ref:`option_headers` option (that is empty by default) Grab also generates a bunch of headers to emulate a typical web browser. At the moment of writing these docs these headers are: * Accept * Accept-Language * Accept-Charset * Keep-Alive * Except If you need to change one of these headers, you can override its value with the :ref:`option_headers` option. You can also subclass the Grab class and define your own `common_headers` method to completely override the logic of generating these extra headers. User-Agent header ----------------- By default, for each request Grab randomly chooses one user agent from a builtin list of real user agents. You can specify the exact User-Agent value with the :ref:`option_user_agent` option. If you need to randomly choose user agents from your own list of user agents, then you can put your list into a text file and pass its location as :ref:`option_user_agent_file`. Referer header -------------- To specify the content of the Referer header, use the :ref:`option_referer` option. By default, Grab use the URL of previously request document as value of Referer header. If you do not like this behaviour, you can turn it off with :ref:`option_reuse_referer` option. HTTP Authentication ------------------- To send HTTP authentication headers, use the :ref:`option_userpwd` option with a value of the form "username:password".