2016-07-23 6 views
0

Hallo, ich habe folgendes cURLWie bekomme ich die JSON-Daten von dieser HttpURLConnection-Implementierung von cURL konvertiert?

curl -X GET --header "api-key: sOmE-API-kEy" "https://api.data.gov.sg/v1/environment/uv-index?date=2016-06-01" 

, die ich von der Website bekam die Daten für intelligente Nation bietet ihre Website gibt richtige json Daten ihre Formulare verwenden, aber ich möchte dies über den Code tun, so weit eine HttpURLConnection mit Ich folge den Code-Referenzen, die ich online gefunden habe, aber es funktioniert nicht und ich konnte nicht sehen, was falsch ist, ich bekomme die NetworkOnMainThreadException, die ich gelöst habe, indem ich es als eine AsyncTask implementiere, aber wenn ich in android Studio debugge jetzt mit einer FileNotFoundException zurück. Ich habe auch versucht, den unten vorgeschlagenen TrustedManager usw. zu verwenden, und es hat immer noch den gleichen Fehler. eine Sache, die ich bemerkt, ist, wenn ich auf die Website gehen und klicken Sie auf die Schaltfläche und sehen es die folgenden ist die in Firebug, die processessed ist ...

https://apiconsole-prod.apigee.net/smartdocs/v1/sendrequest?targeturl=https%3A%2F%2Fapi.data.gov.sg%2Fv1%2Fenvironment%2Fuv-index%3Fdate%3D2016-06-01&_=1469245322558 

aber wenn ich geben Sie direkt aus dem Browser die Antwort so etwas wie dieses hat ... steps.oauth.v2.FailedToResolveAPIKey% 22% 7D% 7D% 7D“, "responseStatusCode": "401"

URL url = new URL("https://api.data.gov.sg/v1/environment/uv-index?date=2016-06-01"); 
    urlConn = (HttpURLConnection)url.openConnection(); 
    urlConn.setRequestMethod("GET"); 
    urlConn.setDoInput(true); 
    urlConn.setDoOutput(true); 
    urlConn.setRequestProperty("Content-Type", "application/json"); 
    urlConn.setRequestProperty("Accept", "application/json"); 
    urlConn.setRequestProperty("api-key", "sOmE-API-kEy"); 

    in = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
    String line; 
    StringBuilder buffer = new StringBuilder(); 
    while ((line = in.readLine()) != null) { 
     buffer.append(line).append('\n'); 
    } 
    // Chomp the last newline 
    buffer.deleteCharAt(buffer.length() - 1); 

** Anmerkung apikey für

Privatsphäre umbenannt

so kurz die Header-Daten von Firebug, wie ich meine ht tp Codeimplementierung

Accept 
*/* 
Accept-Encoding 
gzip, deflate, br 
Accept-Language 
en-US,en;q=0.5 
DNT 
1 
Host  
apiconsole-prod.apigee.net 
Origin 
https://developers.data.gov.sg 
Referer 
https://developers.data.gov.sg/datagovsg-apis/apis/get/environment/uv-index 
User-Agent 
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 
api-key: sOmE-API-kEy 
+0

ich es geschafft th NetworkOnMainThreadException zu lösen in http://stackoverflow.com/questions/6343166/how-to-fix-android-os-networkonmainthreadexception links das einzige Problem ist, ich kann nicht bekommen fand die AsyncTask-Lösung das gleiche Ergebnis wie wenn ich das Formular der Website verwende ... – debonaire

+0

Versuchen Sie, die Zertifikatsprüfung SSL zu deaktivieren –

+0

noch nicht Ich werde es jetzt versuchen. Danke für den Vorschlag Ich werde Sie über das Ergebnis bald aktualisieren – debonaire

Antwort

0

Sie müssen Certificate Validation SSL deaktivieren

TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { 
      public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
       return null; 
      } 
      public void checkClientTrusted(X509Certificate[] certs, String authType) { 
      } 
      public void checkServerTrusted(X509Certificate[] certs, String authType) { 
      } 
     } 
    }; 

    // Install the all-trusting trust manager 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

    // Create all-trusting host name verifier 
    HostnameVerifier allHostsValid = new HostnameVerifier() { 
     public boolean verify(String hostname, SSLSession session) { 
      return true; 
     } 
    }; 

    // Install the all-trusting host verifier 
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 

    URL url = new URL("https://www.nakov.com:2083/"); 
    URLConnection con = url.openConnection(); 
    Reader reader = new InputStreamReader(con.getInputStream()); 
    while (true) { 
     int ch = reader.read(); 
     if (ch==-1) { 
      break; 
     } 
     System.out.print((char)ch); 
    } 
0

gelöst mit den folgenden ...

Sie sollten wahrscheinlich haben urlConn.setDoOutput (false); für eine GET-Anfrage - Yuri Schimke vor 3 Minuten

Vielen Dank für alle Vorschläge!