Diskuze: GET a POST v android studiu s basic auth
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 25 zpráv z 25.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
Basic auth se vkládá do hlavičky požadavku ve formátu:
Basic username:password
Název hlavičky je: Authorization
Dále je potřeba to jméno a heslo zakódovat pomocí base64, aby z toho vznikl jeden řetězec.
Více můžeš najít třeba na Wiki
Mohl by jste zapsat příklad kódu? Úplně nevím jestli teď rozumím. Token na authorizaci mám jen nevím kam s ním do kódu v androidu. Ve VB jsem to měl takto ale tady nevím
Set http = CreateObject("Msxml2.XMLHTTP.6.0")
Dim token
token = "QVBJOjEyMzQ1"
http.Open "GET", "http://IP/data/busorders", false
http.SetRequestHeader "Content-Type", "application/json"
http.SetRequestHeader "Accept", "application/json"
http.setRequestHeader "Authorization", "Basic "& token
http.send
rem RTag.SetTagValue "System", "promena", http.ResponseText
msgbox http.ResponseText
Set http = Nothing
https://androidclarified.com/…lley-example
Scrolluj za půlku stránky a najdeš tam příklad s vložením vlastních hlaviček do GET requestu.
Děkuji mockrát, snad se s tím nějak poperu, nejsem z toho dvakrát moudrý :/
Z čeho přesně nejsi dvakrát moudrý? 
Co jsem tak koukal, tak v tom článku je vše vysvětleno. Knihovnu přidáš
do závislosti a pak ji můžeš začít používat. Kousek za půlkou článku
je kód, kde je příklad na použití vlastních hlaviček:
//URL of the request we are sending
String url = "api.openweathermap.org/data/2.5/weather?q=London";
// Tímto vytvoříš nový požadavek
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener() {
// Toto se zavolá při úspěšném vykonání požadavku => server něco odpověděl
@Override
public void onResponse(JSONObject response) {
//Success Callback
}
},
new Response.ErrorListener() {
// Toto se zavolá při neúspěšném vykonání požadavku
@Override
public void onErrorResponse(VolleyError error) {
//Failure Callback
}
})
{
// Tady přepíšeš metodu na vytvoření vlastních hlaviček
@Override
public Map getHeaders() throws AuthFailureError {
HashMap headers = new HashMap();
headers.put("Content-Type", "application/json");
// Tady vložíš tu tvoji autorizační hlavičku
headers.put("Authorization", "Basic " + token);
return headers;
}
};
// Nakonec to všechno dáš dohromady a odešleš požadavek
MyApplication.getInstance().addToRequestQueue(jsonObjectReq, "headerRequest");
V Androidu už nějaký pátek neprogramuji, tak nevím, jak je dnes moderní
dělat HTTP requesty, ale tento návod mi vyskočil jako první odkaz na google.
Pokud budeš mít i přes to všechno problémy s implementací, hoď sem kód,
který ti nefunguje a něco už vymyslíme. 
Mockrát děkuji, už mi to běží
teď ještě jdu najít nějaký překladač který mi JSON přehodí
do normálního tvaru ve kterém se vyzná normální člověk 
Zdravím tak jestli můžu, tak mám problém s tímto kódem.:
public class MainActivity extends AppCompatActivity {
private String url = "http://............/data/busorders";
private String token = "QVBJOjEyMzQ1";
private RequestQueue requestQueue;
private EditText et_code, et_name;
private Button btn_submit;
private StringRequest stringRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_code = (EditText)findViewById(R.id.et_code);
et_name = (EditText)findViewById(R.id.et_name);
btn_submit = (Button) findViewById(R.id.btn_submit);
btn_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "{"+
"\"code\"" + "\"" + et_code.getText().toString() + "\","+
"\"name\"" + "\"" + et_name.getText().toString() + "\""+
"}";
Submit(data);
}
});
}
private void Submit(String data)
{
final String savedata= data;
requestQueue = Volley.newRequestQueue(getApplicationContext());
stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject objres=new JSONObject(response);
Toast.makeText(getApplicationContext(),objres.toString(),Toast.LENGTH_LONG).show();
} catch (JSONException e) {
Toast.makeText(getApplicationContext(),"Server Error",Toast.LENGTH_LONG).show();
}
//Log.i("VOLLEY", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
//Log.v("VOLLEY", error.toString());
}
}) {
@Override
public Map getHeaders() throws AuthFailureError {
HashMap headers = new HashMap();
headers.put("Content-Type", "application/json");
headers.put("Authorization", "Basic " + token);
return headers;
}
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
return savedata == null ? null : savedata.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
//Log.v("Unsupported Encoding while trying to get the bytes", data);
return null;
}
}
};
requestQueue.add(stringRequest);
}
}
Vyhodí mu to bohužel tuto chybu: E/Volley: [2935]
BasicNetwork.performRequest: Unexpected response code 400 for http://............./data/busorders , pravděpodobně mám
špatně autorizaci 
Ahoj, základem úspěchu bude zjistit, kde je chyba. Když tuto chybu vyGooglíš, tak zjistíš, že na StackOverflow je těchto dotazů spousta. Hned první odkaz je použitelný.
Vlož toto do onErrorResponse metody:
// As of f605da3 the following should work
NetworkResponse response = error.networkResponse;
if (error instanceof ServerError && response != null) {
try {
String res = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, "utf-8"));
// Now you can use any deserializer to make sense of data
JSONObject obj = new JSONObject(res);
} catch (UnsupportedEncodingException e1) {
// Couldn't properly decode data to string
e1.printStackTrace();
} catch (JSONException e2) {
// returned data is not JSONObject?
e2.printStackTrace();
}
}
https://stackoverflow.com/a/35426721
Až to budeš mít, tak by jsi měl být schopný na základě odpovědi ze serveru zjistit, co je špatně. Pokud ani tak neuspěješ, pošli tu odpověď sem...
Jj na tento návod už jsem koukal, vložil jsem kód ale stále stejná odpověď 2019-11-13 08:14:11.811 22678-22722/com.example.parsaniahardik.VolleyPost E/Volley: [3036] BasicNetwork.performRequest: Unexpected response code 400 for http://--.--.---.--:--/data/busorders
Dobrá, tak zkus vytvořit stejný HTTP požadavek v programu typu Postman, aby jsi
ověřil, že ta autorizace funguje.
Očividně to tožit nebude chyba v kódu, ale v datech.
Všechno v pořádku, já si fakt myslím že mám něco blbě napsané přece jen se v tom učím
Dobrá, bude to tedy v kódu. Jaký řádek v kódu tu vyjímku vyhodí? Dojde to vůbec do toho onErrorResponse listeneru?
Jak zjistím řádek? V logcatu to píše jen chybu ale řádek nevím
Možná se nechápeme nebo jsem úplný blbec
Program mám nahraný v
simulátoru, všechno v pořádku, Kliknu na tlačítko odeslat požadavek v
mém případě btn_submit a teprve potom mi log vyhodí tu chybu
Jestli to spouštíš v simulátoru, tak se ujisti, že má přístup k
internetu.
Pokud můžeš, spusť to na reálném zařízení.
Tak si to odkrokuj...
Tím jsem myslel, že spustíš aplikaci v debug modu, hodíš do kódu breakpointy a podíváš se, co se tam doopravdy děje.
Já se omlouvám, ale opravdu nevím kde by mohl být problém, projel jsem
to debugem a všechno se jeví v pohodě. Mohu vám klidně poslat někam
program třeba uvidíte více než já 
Program mi neposílej, nespustil bych ho, protože nemám nainstalovaný AS. Zkoušel jsi to spustit na reálném zařízení?
Ještě né, ale mám jiný program na ten samý server akorát GET požadavek a to mi normálně na simulátoru funguje.
No dobrá, tak asi začni pěkně od začátku.
Nejdřív bych asi ověřil, že ta knihovna funguje tak, jak má. Zkusil bych tedy nejdřív udělat nějaký GET požadavek bez žádné autorizace na nějakou stránku s daty.
Když tohle bude fungovat, tak bych šel dál a přešel bych na POST
požadavek. Nakonec bych nasimuloval odeslání Autorizační hlavičky.
Během zkoumání se někde ta chyba bude muset projevit.
Jasný, už jsem právě nějak od znova začal, děkuji za ochotu a
omlouvám se zdržování 
Zobrazeno 25 zpráv z 25.