johnykim Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Καλησπέρα σε όλους. Από μια εφαρμογή android, θέλω να στείλω ένα json object σε ένα api που είναι ανεβασμένο στο heroku.com. Παρακάτω είναι το url https://secret-coast-78502.herokuapp.com/api/v1/posts Πριν φτιάξω το post request στην android εφαρμογή με java, προσπαθώ να επικοινωνήσω με το api, χρησιμοποιώντας το postman (plugin του chrome) ανεπιτυχώς (παίρνω επιστροφή 500 internal server error). Επισυνάπτω επίσης και το json structure, του οποίου δεν είμαι δημιουργός. Πως μπορώ να καταφέρω ορθή επικοινωνία, χρησιμοποιώντας τις επισυναπτόμενες παραμέτρους; Υποθέτουμε ότι από την πλευρά του api, δεν υπάρχει κανένα πρόβλημα, καθώς επιβεβαιώνεται η σωστή λειτουργία του με curl (του οποίου δεν είμαι γνώστης, και μόλις το δοκιμάζω το συγκεκριμένο εργαλείο). curlTest.doc
Predatorkill Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Υπαρχει μεγαλη πιθανοτητα να μην στελνεις valid JSON object στο raw. edit: εκανα check το JSON object και φαινεται κομπλε. αν μας εδινες το κωδικα του σερβερ/api θα καταλαβαιναμε τι γινεται, πιθανοτητα δεν εχεις βαλει CORS και μολις χτυπας απ'εξω και οχι local τρως πορτα. π.χ. app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Authorization'); next(); });
johnykim Δημοσ. 21 Σεπτεμβρίου 2016 Μέλος Δημοσ. 21 Σεπτεμβρίου 2016 Δέχεται κανονικά post. Δεν το έχω τσεκάρει προσωπικά, αλλά ο δημιουργός του server το έχει επαληθεύσει με curl. Μόλις έκανα και εγώ μια δοκιμή με curl, με επιστροφή 500 πάλι. Κώδικα του server, δεν μπορώ να έχω, όχι.
Predatorkill Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Δεν εχει ρυθμισει σωστα τα CORS μαλλον. Ο δημιουργος το εχει επαληθευσει με το ιδιο curl με σενα; https://www.npmjs.com/package/cors
johnykim Δημοσ. 21 Σεπτεμβρίου 2016 Μέλος Δημοσ. 21 Σεπτεμβρίου 2016 Όχι δυστυχώς, δουλεύει σε άλλη εγκατάσταση curl. Θα προωθήσω αυτό που μου είπες για τα CORS, σε ευχαριστώ.
defacer Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Ο JSON parser στη μεριά του server θα έχει κάποια limits στο τι δεδομένα μπορεί να κάνει parse. Μήπως η τιμή του "who" που στέλνεις είναι πολύ μεγάλη και τα ξεπερνάει;
Predatorkill Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Του αλλου το curl ομως τρεχει, δεν μας ξεκαθαρισε ομως αν το curl ειναι το ιδιο και το εχει δοκιμασει local ή remote.
Portmaster Δημοσ. 21 Σεπτεμβρίου 2016 Δημοσ. 21 Σεπτεμβρίου 2016 Είναι λάθος το http request που κάνεις. Είναι ξεκάθαρο από το doc ότι το api δεν παίζει με json, εσύ με το postman στέλνεις content type application/json. Στείλε content type application/x-www-form-urlencoded και στο body post=json.
johnykim Δημοσ. 22 Σεπτεμβρίου 2016 Μέλος Δημοσ. 22 Σεπτεμβρίου 2016 Καλημέρα σας. Σε ποιο σημείο φαίνεται ότι δεν παίζει με json; Αν μπορείς, στείλε μου ένα screenshot του postman, με τις ρυθμίσεις που λες. Δεν καταλαβαίνω το σημείο που λες να βάλω στο body post=json. Επισυνάπτω το επιτυχημένο curl (από μηχάνημα mac) , έτσι όπως μου το έστειλαν ως επιβεβαίωση ότι λειτουργεί ο server. ok.doc
anon667 Δημοσ. 22 Σεπτεμβρίου 2016 Δημοσ. 22 Σεπτεμβρίου 2016 Παράδειγμα POST κλήσης με Postman στην μορφή που περιγράφει παραπάνω ο Portmaster.
johnykim Δημοσ. 22 Σεπτεμβρίου 2016 Μέλος Δημοσ. 22 Σεπτεμβρίου 2016 Σε ευχαριστώ , αλλά το δοκίμασα και έτσι χωρίς επιτυχία.
anon667 Δημοσ. 22 Σεπτεμβρίου 2016 Δημοσ. 22 Σεπτεμβρίου 2016 Πρέπει να ζητήσεις από τον τύπο που έχει τον server να σου πει τι ακριβώς βλέπει στα logs του, αλλιώς δεν βλέπω να βγάζεις άκρη.
tomtoub Δημοσ. 22 Σεπτεμβρίου 2016 Δημοσ. 22 Σεπτεμβρίου 2016 Όπως φαίνεται από το doc, πρέπει να στείλεις μόνο μία μεταβλητή, την post, που σαν τιμή θα έχει ένα json με τις μεταβλητές που θέλεις μέσα.
johnykim Δημοσ. 22 Σεπτεμβρίου 2016 Μέλος Δημοσ. 22 Σεπτεμβρίου 2016 Σε ευχαριστώ πολύ! Δεν κατάλαβα ότι υπάρχει μια μεταβλητή που περιέχει το json object! Θα παραθέσω σε λίγο και τον κώδικα από το android, για όποιον τον ενδιαφέρει.
johnykim Δημοσ. 22 Σεπτεμβρίου 2016 Μέλος Δημοσ. 22 Σεπτεμβρίου 2016 Εδώ είναι και ο κώδικας που χρησιμοποίησα στην java. import java.io.IOException; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.FormBody; public class PostRequest { OkHttpClient client = new OkHttpClient(); String postValue = "{\"who\":\"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\", \"lat\":38.0742,\"long\":23.8148,\"metervalue\":45,\"barcode\":456789}"; String post(String url) throws IOException { RequestBody body = new FormBody.Builder() .add("post", postValue) .build(); Request request = new Request.Builder() //.addHeader("header_a", "value_a") .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); } } public static void main(String[] args) throws IOException { PostRequest example = new PostRequest(); String response = example.post("https://secret-coast-78502.herokuapp.com/api/v1/posts"); System.out.println(response); } }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα