React Native - 获取POST请求作为GET请求发送

时间:2016-02-01 21:07:58

标签: react-native

使用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请求,并且不存在应该在正文中的用户名和密码。

enter image description here

任何人都可以帮忙解决这个问题吗?

11 个答案:

答案 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不在/

结尾,则Django不喜欢它

答案 10 :(得分:0)

类似于Rishijay的回答,我的问题是JSON.stringify无法正确转换POST请求的正文。

我解决此问题的方法是使用search-params节点模块中的build使其正常工作。 我的提取内容具有这样的body: build({...})

主体