cvoigt
cvoigt

Reputation: 587

HTTPotion.get with "Referer" in header

This is the first time I'm working with Elixir, so I'm having some issues with my first app. I'm trying to implement the equivalent of the following curl-request in elixir with the help of HTTPotion:

$ curl -s -X GET https://secure.us.playstation.com/playstation/psn/profile/public/userData?onlineId=eagon1337 --referer https://secure.us.playstation.com/logged-in/trophies/public-trophies/ | python -mjson.tool
{
    "avatarUrl": "//static-resource.np.community.playstation.net/avatar_m/3RD/UP40731301009_65ED8105B0C68DC79ABC_M.png",
    "curLevel": "3",
    "handle": "eagon1337",
    "isPlusUser": "1",
    "progress": "15",
    "totalLevel": "",
    "trophies": {
        "bronze": "44",
        "gold": "0",
        "platinum": "0",
        "silver": "1"
    }
}

Which sends the following Request-Header:

> GET /playstation/psn/profile/public/userData?onlineId=eagon1337 HTTP/1.1
> User-Agent: curl/7.30.0
> Host: secure.us.playstation.com
> Accept: */*
> Referer: https://secure.us.playstation.com/logged-in/trophies/public-trophies/

I came up with the following Elixir code:

defmodule PS4 do
    def helloWorld do

        name = "eagon1337"
        url = "https://secure.us.playstation.com/playstation/psn/profile/public/userData?onlineId=" <> name
        headers = [{"Accept", "*/*"},
                   {"Host", "secure.us.playstation.com"},
                   {"Referer", "https://secure.us.playstation.com/logged-in/trophies/public-trophies/"},
                   {"User-Agent", "curl/7.30.0"}]

        IO.puts "Getting " <> url

        response = HTTPotion.get url, headers: headers

        IO.puts response.body

    end
end

Which results in

iex(1)> PS4.helloWorld
Getting https://secure.us.playstation.com/playstation/psn/profile/public/userData?onlineId=eagon1337
** (HTTPotion.HTTPError) req_timedout
    (httpotion) lib/httpotion.ex:209: HTTPotion.handle_response/1
          (ps4) lib/ps4.ex:14: PS4.helloWorld/0

Running the whole request against http://httpbin.org/get results in a pretty smooth header (with additional removing of the "host"-header):

iex(1)> PS4.helloWorld
Getting httpbin.org/get
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "0", 
    "Host": "httpbin.org", 
    "Referer": "https://secure.us.playstation.com/logged-in/trophies/public-trophies/", 
    "User-Agent": "curl/7.30.0"
  }, 
  "origin": "92.77.68.151", 
  "url": "http://httpbin.org/get"
}

:ok

Obviously the requested URL expects a specific Referer. But why is it working with curl, but not via my Elixir approach? What am I missing?

Upvotes: 4

Views: 429

Answers (1)

parroty
parroty

Reputation: 1375

It's not direct answer, but using http://us.playstation.com/ instead of https://secure.us.playstation.com seems working. So I'm wondering it might be related to ssl part (haven't been able to find out the background yet).

Upvotes: 1

Related Questions