React Native - запрос POST запроса отправляется как запрос GET

У меня возникают проблемы при использовании FETCH.

Я пытаюсь сделать запрос POST, используя FETCH в native-native.

    fetch("http://www.example.co.uk/login", {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            username: 'test',
            password: 'test123',
        })
    })

        .then((response) => response.json())
        .then((responseData) => {
            console.log(
                "POST Response",
                "Response Body -> " + JSON.stringify(responseData)
            )
        })
        .done();
}

Когда я проверяю этот вызов с помощью Charles, он записывается как запрос GET, а имя пользователя и пароль, которые должны быть в теле, отсутствуют.

введите описание изображения здесь

Может ли кто-нибудь помочь с этой проблемой?

Ответ 1

Это сработало для меня:

let data = {
  method: 'POST',
  credentials: 'same-origin',
  mode: 'same-origin',
  body: JSON.stringify({
    appoid: appo_id
  }),
  headers: {
    'Accept':       'application/json',
    'Content-Type': 'application/json',
    'X-CSRFToken':  cookie.load('csrftoken')
  }
}
return fetch('/appointments/get_appos', data)
        .then(response => response.json())  // promise
        .then(json => dispatch(receiveAppos(json)))
} 

Ответ 2

У меня была эта проблема, когда запрос POST был связан с сервером HTTPS (а не с HTTP). По какой-то причине он где-то по пути будет преобразован в запрос GET.

Оказывается, что я делал неправильно, отправлял запрос http://myserver.com:80, а не https://myserver.com:443. Как только я переключился на соответствующий префикс и порты, запрос будет правильно отправлен как POST.

Ответ 3

У меня была такая же проблема. Вы должны назначить объект, не знаете почему.

let options = {};

options.body = formdata;

options.header = header;

options.method = 'post';

Ответ 4

Перенаправление url преобразует запрос POST в запросы GET. (Не знаю почему). Поэтому убедитесь, что добавлены конечные стрелки, если таковые имеются. как: " http://www.example.co.uk/login/ "

Ответ 5

Я была такая же проблема. В моем случае у меня был дополнительный / в конце моего маршрута. Я удалил это, и проблема решена.

http://google.com/someData/ to http://google.com/someData

Ответ 6

Если вы хотите сделать запрос POST, используя fetch, вы можете сделать это

        fetch('[email protected]&[email protected]', {
             method: 'POST'
          })
          .then((response) => response.json())
          .then((responseJson) => {
             console.log(responseJson);
             // this.setState({
             //    data: responseJson
             // })
          })
          .catch((error) => {
             console.error(error);
          });

Ответ 7

Я внес некоторые изменения и протестировал его, у меня работает нормально, проверьте ниже все изменения:

 constructor(props) {
    super(props);
    this.state = { isLoading: true};
    this.getRemoteData();
 }

getRemoteData = () => {

fetch('http://www.example.co.uk/login', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                username: 'test',
                password: 'test123',
            })
        })

            .then((response) => response.json())
            .then((responseData) => {
                console.log("RESULTS HERE:", responseData)

            this.setState({
          isLoading: false,
          dataSource: responseJson,
        }, function(){

        });
      })
      .catch((error) =>{
        console.error(error);
      }) 
};

Ответ 8

Используйте FormData. Проблема с JSON.stringify. Вы можете напрямую импортировать, это не третье лицо

import FormData from 'FormData';
...
var data = new FormData();
data.append("username", "ABCD");
data.append("password", "1234");
fetch('YOUR_URL', {
method: 'POST',
headers: {
    Accept: 'application/json',
    'Content-Type': 'multipart/form-data',
},
body:data,
})
.then((response) => response.json())
.then((responseJson) => {
    console.log('response object:',responseJson)
})
.catch((error) => {
  console.error(error);
});

Ответ 9

В моем случае редирект был вызван неправильно сформированным URL для запроса POST: http://localhost:90/Worx/drupal/d8/www//jsonapi двойной слеш перед jsonapi

Из-за неправильного URL браузер перенаправлял запрос и менял метод с POST на GET.

Я смог отладить его после прочтения этого: https://serverfault.com/info/434205/nginx-https-rewrite-turns-post-to-get