Wysłanie posta do serwera - Java REST POST TOKEN

0

Hey, zwracam się z prośbą. Próbuje napisać posta który będzie uderzał w konkretny adres i z jakim problemem sie spotykam. Jeżeli w restman-ie wysyłam sobie posta to dostaje status kodu 200 ale.... No właśnie ale jeżeli wysyłam to w formularzu to mam sukces, jeżeli surowe dane to juz jest problem.screenshot-20210715225007.png Dostaje status kodu 200 jednak pojawia się błąd z tokenem. W przypadku wysłania danych w formularzu wszystko działa ok: screenshot-20210715225129.png
Czy da się to napisać w javie tak jak jest z zrobione z formularzem? Czy ktos ma jakieś pomysły z czego moze wynikac błąd z tokenem?

1

Wygląda jakbyś używał jakiegoś patologicznego API, które miesza sobie formdata z jsonem (albo używasz go inaczej niż twórca sobie wymyślił). Na pewno się da w Javie to zrobić, choćby formatując dane jako formdata. Pytanie czego używasz do robienia zapytań.

1

A ten token to nie jest czasem CSRF który zmienia sie co request? I musiałbyś zrobić GET, odczytać token i dopiero potem POST z tym tokenem? :)
No i byłoby prościej jakbyś pokazał jak wygląda cały request który leci z formualrza (w przeglądarce dajesz inspect a potem network) bo teraz to wróżymy z fusów.

0

@Shalom: screenshot-20210715232829.png Czy o to chodziło?

0

@szatkus: oke mam screenshot-20210715233721.png

0

No to widzisz ze formularz wysyła jakiś multipart z jakimiś różnymi rzeczami w środku. Trudno powiedzieć czy to API łyka jakieś normalne jsonowe payloady czy tylko taką sieczkę. Spróbuj z Javy zbudować taki multipart request i zobacz czy zadziała. A ten token się zmienia co GET? Bo jeśli tak, to na 99% to CSRF i musisz najpierw zrobić GET żeby pobrać token.

Sprawdź najpierw z tym tokenem wysyłając normalnego jsona.

1

Taki jest przykład u nich:
Sample: https://api.baselinker.com/connector.php , POST: token=1-23-ASOIM234MFDSK534LDS &method=getOrders &parameters={"date_from": 1407341754}

Ja mam to tak rozwiązane w C# robione dawno temu :

                {
                    var data = new NameValueCollection();
                    data["token"] = token;
                    data["method"] = "getOrders";
                    data["parameters"] = "{\"order_id\": Id zamówienia}"; 

                    var response = wb.UploadValues(url, "POST", data);
                 } 

A tak wygląda z Postmana wybierając Java - Unirest:

Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("https://api.baselinker.com/connector.php")
  .multiPartContent()
  .field("token", "wartość tokenu")
  .field("method", "getOrders")
  .field("parameters", "{
    \"date_confirmed_from\": 1407341754,
    \"get_unconfirmed_orders\": false
}")
  .asString();
0

Podczas próby skorzystania z kodu generowanego przez postmana sypie błędami. Nie mogę w żaden sposób zaimplementować pewnych funkcji. Wygenerowany kod wygląda następująco:

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("token","3001721-3007744-9M92QYNC27FVANV3XXTNKXRIJQxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  .addFormDataPart("method","addProduct")
  .addFormDataPart("parameters","{
    \"storage_id\": \"bl_1\",
    \"name\":\"kielba\",
    \"category_id\":197756
    }")
  .build();
Request request = new Request.Builder()
  .url("https://api.baselinker.com/connector.php")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

Natomiast intelij mówi coś takiego:
screenshot-20210720231612.png
Po dodaniu zależności nadal prosi o ich dodanie ;///

0

Nie wierze ze w jednej linijce ma być new... i .Builder() albo .newBuilder()
Zamiast bezmyślnie stukać w klawiaturę zwyczajnie popatrz w API, zobacz jakie metody są dostepne i popraw ten kod. Np. już na oko widzę ze importujesz klasę RequestBody nie tą co trzeba, bo jest żółta więc wziąłeś adnotacje springową zamiast interfejsu z OkHttp xD Ty w ogóle wiesz co robisz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1