使用FETCH时遇到问题。
我正在尝试在react-native中使用FETCH发出POST请求。
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请求,并且不存在应该在正文中的用户名和密码。
任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:4)
这对我有用:
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)))
}
答案 1 :(得分:4)
当POST请求发送到HTTPS(而不是HTTP)服务器时,我遇到了此问题。出于某种原因,它会在某个地方被转换为GET请求。
事实证明我错误的做法是将请求发送到http://myserver.com:80
而不是https://myserver.com:443
。一旦我将其切换到正确的前缀和端口,请求将正确发送为POST。
答案 2 :(得分:3)
我遇到了同样的问题。你必须分配对象,不知道为什么。
让options = {};
options.body = formdata;
options.header = header;
options.method =' post';
答案 3 :(得分:1)
url的重定向将POST请求转换为GET请求。(不知道为什么) 因此,请确保添加尾随箭头(如果有)。 喜欢:“http://www.example.co.uk/login/”
答案 4 :(得分:0)
我有同样的问题。在我的情况下,我在路线尽头有一个额外的/
。我将其删除并解决了问题。
http://google.com/someData/
至http://google.com/someData
答案 5 :(得分:0)
如果您想使用访存进行POST请求,则可以这样做
fetch('url?email=a@gmail.com&password=a@gmail.com', {
method: 'POST'
})
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
// this.setState({
// data: responseJson
// })
})
.catch((error) => {
console.error(error);
});
答案 6 :(得分:0)
我已经进行了一些更改并进行了测试,对我来说效果很好,请检查所有更改:
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);
})
};
答案 7 :(得分:0)
使用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);
});
答案 8 :(得分:0)
就我而言,重定向是由POST请求的网址格式错误引起的:
http://localhost:90/Worx/drupal/d8/www//jsonapi
jsonapi前加双斜杠
由于网址错误,浏览器正在重定向请求并将方法从POST更改为GET。
阅读以下内容后,我可以对其进行调试: https://serverfault.com/questions/434205/nginx-https-rewrite-turns-post-to-get
答案 9 :(得分:0)
检查您的OPTIONS响应。它可能具有302 redirect
或类似名称。
在我们的例子中,如果URL不在/
答案 10 :(得分:0)
类似于Rishijay的回答,我的问题是JSON.stringify无法正确转换POST请求的正文。
我解决此问题的方法是使用search-params节点模块中的build使其正常工作。
我的提取内容具有这样的body: build({...})