Fórum nápovědy

Seznam

Chyba 406

Kytary CZ

13.1.2023 v 10:40

Dobry den.
Pri kroku "vymena kodu za token" dostavam chybu 406 ze serveru.

Content-Type: "application/json; charset=utf-8"
{
"grant_type":"authorization code",
"code":kod z prvniho kroku,
"redirect_uri":"localhost:9999",
"client_id": client_id od seznamu,
"client_secret": client_secret od seznamu
}

V odpovedi mam StatusCode == NotAcceptable a StatusDescription == "client doesn't accept application/json"
Kde by mohl byt problem?

Lenka Philippová

18.1.2023 v 11:29

Dobrý den,

zkuste pridat hlavicku Accept: application/json

Kytary CZ reagoval na příspěvek od Lenka Philippová

18.1.2023 v 14:19

Dobry den,
error 406 jsem jiz asi vyresil, ale ted mam problem, ze mi server vraci error 500.

Kytary CZ

18.1.2023 v 15:18

Error 406 jsem vyresil tak, ze jsem JSON prevedl na string a obalil jsem ho hranatymi zavorkami "[...]"

Jan-Matej Lopata reagoval na příspěvek od Kytary CZ

19.1.2023 v 7:42

to zrejme nebude uplne dobre

Jan-Matej Lopata

19.1.2023 v 7:43

Zkuste neco jako:
```
curl --location --request POST 'https://login.szn.cz/api/v1/oauth/token' \
--header 'Content-Type: application/json' \
--data-raw '{
"grant_type": "authorization_code",
"code": "xx",
"redirect_uri": "http://localhost:9999",
"client_secret": "xxx",
"client_id": "xxx"
}'
```

Kytary CZ reagoval na příspěvek od Jan-Matej Lopata

23.1.2023 v 10:52

Dobry den.
Pri pouziti Invoke-Webrequest (Powershell prostredi).
```
$body =
'[{
"grant_type":"authorization_code",
"code":"x",
"redirect_uri":"http://localhost:9999/Operations/LoginSeznam/",
"client_secret":"xx",
"client_id":"xxx"
}]'

$content_type="application/json"

Invoke-WebRequest -Uri 'https://login.szn.cz/api/v1/oauth/token' -Method POST -Body ($body|ConvertTo-Json) -ContentType $content_type
```
Odpověd serveru:
"Invoke-WebRequest :
Chyba 500 – Chyba serveru
Při zpracování požadované stránky došlo na straně serveru k chybě.
Přejít na přihlášení
Copyright © 1996–2022 Seznam.cz, a.s."

Zkousel jsem take
```
curl -X POST https://login.szn.cz/api/v1/oauth/token -H 'Content-Type: application/json' -d '{"grant_type":"authorization_code","code":"xx",redirect_uri":"http://localhost:9999/Operations/LoginSeznam/","client_secret":"xxx","client_id":"xxx"}'
```

to vraci
{"error": "unsupported_grant_type", "redirect": true}

Nasel jsem v diskuznim foru jeden prispevek ( https://napoveda.seznam.cz/forum/threads/159789/1 ), kde to vypada, ze ma podobny problem a take v "code" mam znak "|", ale nevim, jestli to je ono nebo jak tento problem vyresit.



Ondřej Žára • Webmaster Guru

23.1.2023 v 12:51

Hezky den,

ad powershell: neumim powershell, ale vim, ze takto to fungovat zcela jiste nebude. Hranate zavorky v JSONu znamenaji pole, nic takoveho se posilat nema.

ad CURL: tato varianta vypada slibneji, nicmene zde poslana ukazka neni korektni (chybi uvozovky pred redirect_uri), takze na jejim zaklade neumim problem zreprodukovat. Zkuste prosim poslat *presne* to CURL volani, co zkousite (samozrejme bez client_secret).

Kytary CZ reagoval na příspěvek od Ondřej Žára

23.1.2023 v 17:43

Request posilam s uvozovkama u redirect_uri. Omylem jsem je umazal, kdyz jsem menil hodnotu pro "code" na "x".

Toto:
```
curl -X POST https://login.szn.cz/api/v1/oauth/token -H 'Content-Type: application/json' -d '{"grant_type":"authorization_code","code":"x","redirect_uri":"http://localhost:9999/Operations/LoginSeznam/","client_secret":"xx","client_id":"xxx"}'
```

Vraci:
```
{"error": "unsupported_grant_type", "redirect": true}curl: (6) Could not resolve host: application
```

Ondřej Žára • Webmaster Guru reagoval na příspěvek od Kytary CZ

24.1.2023 v 9:53

Napis "Could not resolve host: application" je silne podezrely; to vypada, ze poslana commandline se naparsuje nejak podivne (z application/json je hostname pro curl??) a tim padem se ani spravny Content-Type nedostane na backend.

Pokud tento prikaz posilate do windows command promptu, delate to spatne: v nem nema apostrof ten vyznam, ktery ocekavate (https://superuser.com/questions/324278/how-to-make-windows-command-prompt-treat-single-quote-as-though-it-is-a-double-q). Zkuste jej vlozit do nejakeho linuxoveho shellu.

Pokud trvate na windows command promptu, bude nutne parametry ohranicovat uvozovkami (nikoliv apostrofem). Pak ale nastane problem s dvojim escapovanim JSON dat.

TL;DR: pokud mate k dispozici jen windows command prompt, nezkousejte CURL. Pouzijte bud plnohodnotny shell (+curl), nebo plnohodnotny programovaci jazyk (PHP, Python, ...).

Jaroslav Malik

24.1.2023 v 18:01

dnes jsem řešil podobný problém, vracelo mi chybu 406 "client doesn't accept application/json", nakonec mi pomohlo v hlavičce dotazu uvést 'Accept' => '*/*'

Kytary CZ reagoval na příspěvek od Jaroslav Malik

26.1.2023 v 13:56

To bylo ono!
Diky moc, uz jsem si z toho malem vytrhal vlasy :-)

Vedel bys proc to tak je?
Cekal bych, ze kdyz tam poslu "Accept": "application/json", tak to bude fungovat, ale nic.

Pro info pracuji na Vidlich v ASP.NET.

Vojtěch Jaroš

26.1.2023 v 14:11

Asi tomu rozumim.
Seznam server zpet posila JSON, ale spatne dava do content typu "text/html" misto "application/json" a proto server neumi odpovedet, protoze ja ze sveho requestu pozaduji "application/json", jak ma Seznam v dokumentaci, ale seznam server zadnou takovou odpoved dat nemuze, protoze podle headeru je schopen posilat pouze text/html.

Opravte me, jestli se pletu.

Ondřej Žára • Webmaster Guru reagoval na příspěvek od Vojtěch Jaroš

30.1.2023 v 8:18

Dobry den,

muzete ukazat celou obdrzenou odpoved, vcetne hlavicek, aby z toho bylo patrne, ze je to JSON ale v Content-type je "text/html"? Jsem pevne presvedcen o tom, ze JSON odpoved s daty oauth tokenu ma Content-type: application/json.

Vojtěch Jaroš reagoval na příspěvek od Ondřej Žára

30.1.2023 v 10:33

Máte pravdu. Content-type je v odpovědi application/json.
Nedokážu říct, proč to funguje s Accept:"*/*", ale s Accept:"application/json" to vrací 406.

Nový dotaz

Přiložené přílohy

    Zbývá 12MB (z 12MB)

    Chyba 406

    Přiložené přílohy

      Zbývá 12MB (z 12MB)