Отправить POST-запрос formData со строковым параметром - PullRequest
0 голосов
/ 20 марта 2019

У меня есть Loopback API, и я хочу отправить запрос POST.Это требуется от API:

enter image description here

В Android я делаю это так:

public static Api getRetrofit(String token) {

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

httpClient.addInterceptor(chain -> {

    Request original = chain.request();
    Request.Builder builder = original.newBuilder()
           .addHeader("x-access-token", token)
           .method(original.method(),original.body());
    return  chain.proceed(builder.build());

});



 String token = mEtToken.getText().toString();
 String password = mEtPassword.getText().toString();
 User user = new User();
    user.setNewPassword(password);
    resetPasswordFinishProgress(user);

И это работает.

Теперь на веб-сайте в форме HTML у меня есть функция javascript, в которой, когда я отправляю запрос, я получаю ответное сообщение от API с кодом 400, говорящее:

{"error":{"statusCode":400,"name":"Error","message":"newPassword is a required argument","stack":"Error: newPassword is a required argument\n

Это функция:

function post() {

    const urlParams = new URLSearchParams(window.location.search);
    const token = urlParams.get('access_token');
    console.log("TOKEN:", token);
    const user = {
        newPassword: document.querySelector('#input-password-check').value,
    }

    const http = new XMLHttpRequest()
    http.open('POST', 'https://www.example.com/Users/reset-password')
    http.setRequestHeader('x-access-token', token)
    http.send(JSON.stringify(user))
    console.log(JSON.stringify(user))
    http.onload = function() {
        alert(http.responseText)
    }
}

Журнал печатает это:

{"newPassword":"mypass"}

Что я делаю не так?Он выглядит так же, как и в Android.

Если это поможет, это вызов CURL из Loopback API:

curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'newPassword=s' 'https://www.example.com:3000/Users/reset-password?access_token=qRBj0mQYB8MHz6p8MHz68MHz6RBj0mQYB8MHz6RBj0mQYB8MHz6

1 Ответ

0 голосов
/ 23 марта 2019

Я сам нашел проблему.

У меня был установлен только заголовок авторизации, а на стороне сервера не получалось, что я отправляю json контент, мне пришлось добавить еще один заголовок Content-Type:

const http = new XMLHttpRequest()
    http.open('POST', 'https://www.example.com/Users/reset-password')
    http.setRequestHeader('x-access-token', token)
    http.setRequestHeader('Content-Type', 'application/json')
    http.send(JSON.stringify(user))
    console.log(JSON.stringify(user))
    http.onload = function() {
        alert(http.responseText)
    }
...