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