Reputation: 587
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
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