Skip to content


Subversion checkout URL

You can clone with
Download ZIP


Custom User-Agent not remembered during session #180

karlcow opened this Issue · 4 comments

3 participants


When testing it is often useful to have a set of predefined profiles such as different set of headers for different browsers. It helps with testing Web sites.

One way to do that currently is to create a variable for each profile.

→ export FOO="blah:X Yada:Z"
→ echo $FOO
blah:X Yada:Z
→ http --print hH GET $FOO
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
User-Agent: HTTPie/0.7.2
Yada: Z
blah: X

HTTP/1.1 200 OK

but it would be entirely possible to have a feature such as

http --profile foo GET

where foo is a JSON file in .httpie/profiles/foo.json


I would love this feature. :+1:


HTTPie supports sessions that allow you to do this. Example:

Create a session file:

$ http --session=/tmp/foo.json blah:X Yada:Z

# or, you can also create the file manually:
$ echo '
    "headers": {
        "Yada": "Z",
        "blah": "X"
}' > /tmp/foo.json

Reuse it whenever needed:

$ http -v --session=/tmp/foo.json
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
User-Agent: HTTPie/0.8.0-dev
Yada: Z
blah: X

Please see for more details.

@jkbrzt jkbrzt closed this

I guess we can reopen the issue because it is not what we were expecting.

Let's say we create the JSON file:

{ "headers": {
    "User-Agent": "Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0", 
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-us,en;q=0.5",
    "Accept-Encoding":  "gzip, deflate",
    "DNT": "1"

Following your instructions, I do

→ http --print hH --session=./firefox-os.json GET

which is leading to:

GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-us,en;q=0.5
DNT: 1
User-Agent: HTTPie/0.7.2

HTTP/1.1 301 Moved Permanently
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, private, max-age=900
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Wed, 18 Dec 2013 21:01:27 GMT
Expires: Wed, 18 Dec 2013 21:16:27 GMT
Pragma: no-cache
Server: Apache
Vary: User-Agent,Accept-Language
X-Cache-Info: not cacheable; response specified "Cache-Control: no-store"
X-Robots-Tag: noodp

The first anomaly is User-Agent: HTTPie/0.7.2.
Then HTTPie is rewriting the session file to

    "__meta__": {
        "about": "HTTPie session file", 
        "help": "", 
        "httpie": "0.7.2"
    "auth": {
        "password": null, 
        "type": null, 
        "username": null
    "cookies": {}, 
    "headers": {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
        "Accept-Encoding": "gzip, deflate", 
        "Accept-Language": "en-us,en;q=0.5", 
        "DNT": "1", 
        "User-Agent": "Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0"

So not working.


This will solve the rewriting

http --print hH --session-read-only=./firefox-os.json GET

The User-Agent is still not working. I tried reordering the json file but without success.

@jkbrzt jkbrzt reopened this
@jkbrzt jkbrzt changed the title from Profile of headers for HTTP requests to Custom User-Agent not remembered during session
@jkbrzt jkbrzt added the bug label
@jkbrzt jkbrzt closed this issue from a commit
@jkbrzt Make sure session and default headers play nice
Before: headers = default + args + session
Now:    headers = default + session + args

Fixes #180
@jkbrzt jkbrzt closed this in 858555a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.