NetworkSecurityConfig: Nu a fost specificată nicio configurație de securitate a rețelei, se utilizează configurația implicită a platformei Cod de răspuns la eroare: 400 (Programare, Java, Android, Asp.Net Web Api, Rețea)

Markus a intrebat.

Încerc să mă conectez la oricare dintre aceste locuri și să obțin datele JSON:-

https://content.guardianapis.com/search?q=debate&tag=politics/politics&from-date=2014-01-01&api-key=test
https://content.guardianapis.com/search?q=debates&api-key=test
https://content.guardianapis.com/search?api-key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

La toate trei pot ajunge prin browser, dar când încerc să le accesez prin intermediul unei aplicații android primesc următoarele erori:-

NetworkSecurityConfig: No Network Security Config specified, using platform default
Error response code: 400

Am adăugat acest lucru în manifest.xml:-

<uses-permission android_name="android.permission.INTERNET"/>

De asemenea, am adăugat acest lucru la manifest.xml:-

android:networkSecurityConfig="@xml/network_security_config"

Și am creat res/xml/network_security_config.xml, care conține:-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">content.guardianapis.com</domain>>
    </domain-config>

Ceea ce schimbă eroarea în:-

D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
Error response code: 400

Știu că lipsește:-

<trust-anchors>
    <certificates src="@raw/my_ca"/>
</trust-anchors>

dar nu am nicio idee unde sau ce ar trebui să fie certificatul sau dacă este necesar.

Nu sunt foarte sigur ce se întâmplă, orice ajutor ar fi apreciat.

ÎN PLUS: – Mă pot conecta bine și pot obține JSON de la acest URL: –

https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&eventtype=earthquake&orderby=time&minmag=6&limit=10

Tot ce primesc este următorul lucru:-

No Network Security Config specified, using platform default

Cumpără nu eroare 400 și trece cu un 200 în schimb. Așa că mă face să cred că se întâmplă ceva ciudat, dar nu sunt sigur unde.

Comentarii

  • Cu excepția cazului în care doriți să restricționați adresele URL pe care aplicația dvs. le poate accesa din anumite motive, nu este nevoie să faceți o configurație personalizată de securitate a rețelei – cea implicită este aproape întotdeauna suficientă. Singurul caz în care nu este așa este dacă aveți un certificat de încredere pentru serviciul dvs., ceea ce nu se întâmplă practic niciodată în zilele noastre, Let’s Encrypt fiind aproape gratuit. –  > Por Gabe Sechan.
  • Adăugați acest lucru în tag-ul aplicației:- android_usesCleartextTraffic=”true” –  > Por Chirag Nahar.
  • Mulțumesc, am început fără ea, am adăugat doar securitatea rețelei într-un efort de a încerca să o fac să funcționeze. –  > Por Markus.
  • Vă rugăm să împărtășiți osul dispozitivului , modalitatea și, de asemenea, utilizarea api, adică codul în care apelați metoda api, Mulțumesc – -.  > Por Învățător rapid.
  • Schimbat la usesCleartextTraffic=”true”, încă dă aceeași eroare de cod 400. –  > Por Markus.
2 răspunsuri
Învățător rapid

Încearcă aceste soluții

Soluția 1)

Adăugați următorul atribut la <application în AndroidManifest.xml:

android:usesCleartextTraffic="true"

Soluția 2)

Adăugați android:networkSecurityConfig="@xml/network_security_config" la eticheta <application în app/src/main/AndroidManifest.xml:

<application
        android_name=".ApplicationClass"
        android_allowBackup="true"
        android_hardwareAccelerated="false"
        android_icon="@mipmap/ic_launcher"
        android_label="@string/app_name"
        android_largeHeap="true"
        android_networkSecurityConfig="@xml/network_security_config"
        android_supportsRtl="true"
        android_theme="@style/AppTheme">

Cu o etichetă corespunzătoare network_security_config.xml în app/src/main/res/xml/:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

Consultați acest răspuns pentru mai multe informații: Download Manger nu funcționează în Android Pie 9.0 (Xiaomi mi A2)

Comentarii

  • Îmi pare rău că încă nu am avut noroc. Mă întreb dacă nu cumva ar putea fi o problemă cu modul în care fac cererea către server. Este o simplă cerere GET, așa că nu sunt sigur de ce ar putea fi. Voi căuta mai departe. –  > Por Markus.
  • Puteți explica mai detaliat ce înseamnă fiecare dintre aceste soluții? –  > Por Shachar Har-Shuv.
  • Omule, pentru cineva care este specializat în dezvoltarea iOS, ce este cu necesitatea acestei locații de cale lungă? M-ai salvat cu acest detaliu care lipsea din ghidul Android. Mulțumesc! –  > Por David.
Dezvoltator nebun

Răspuns editatEliminați <domain includeSubdomains="true">secure.example.com</domain> din cod.

Folosiți doar:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

Și va funcționa pentru orice URL sau IP.

Încercați să setați cleartextTrafficPermitted=false

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
       <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

Comentarii

  • Vă mulțumim pentru răspuns. Încă primesc: – Utilizarea configurației de securitate a rețelei din resursa network_security_config debugBuild: true, Cod de răspuns la eroare: 400 –  > Por Markus.
  • @Markus cum ai rezolvat problema? Și eu am aceeași problemă într-unul din proiectele mele. Este ceva legat de server. Așa cum am rezolvat-o folosind aceeași soluție pentru un alt proiect. Anunțați-mă. –  > Por Dezvoltator nebun.
  • Problemele au sfârșit prin a fi o eroare în șirul meu de URL care solicita informațiile, ceea ce a cauzat eroarea 400. După ce am corectat șirul meu de cerere URL API, a funcționat bine. –  > Por Markus.
  • Dar, Url-ul meu a fost corect și m-am dat cu capul de pământ, dar nu pot rezolva. Deci, am încercat codul pe care îl adaug ca răspuns. Funcționează pentru orice url sau IP. –  > Por Dezvoltator nebun.
  • Am vrut să spun că eroarea a fost în cererea URL, site-ul nu a putut înțelege cererea, așa că a returnat o eroare 400. –  > Por Markus.