获取不在React Native中发送正文

问题描述 投票:0回答:1

我正在尝试将一些JSON从本地应用程序发布到本地网络上的端点,但它似乎实际上并不是在发布正文。

    fetch( 'http://192.168.4.1/access-points', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify( {
            ssid: 'SSIDNAME',
            password: 'SSIDPASSWORD',
        } ),
    } );

它使用正确的方法和内容类型命中端点,但是身体无处可寻。

下面是当我从react本机应用程序发出请求时端点似乎收到的内容。

POST /access-points HTTP/1.1
Host: 192.168.4.1
Content-Type: application/json
Connection: keep-alive
Accept: */*
User-Agent: Hame/1 CFNetwork/808.2.16 Darwin/15.6.0
Content-Length: 45
Accept-Language: en-us
Accept-Encoding: gzip, deflate

当我使用Paw提出请求时,这就是我得到的

POST /access-points HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: 192.168.4.1
Connection: close
User-Agent: Paw/3.0.16 (Macintosh; OS X/10.11.6) GCDHTTPRequest
Content-Length: 45

{"ssid":"SSIDNAME","password":"SSIDPASSWORD"}

正如您所看到的,两者都报告了正确的Content-Length

react-native fetch-api
1个回答
0
投票

我有同样的问题,然后我检查了request.form和request.data,我发现正文被发送到request.data,所以request.form返回None

所以解决方案是将request.form更改为request.data或更改fetch选项以将body发送到request.form

如果要将正文发送到request.form,请设置标题:

'Accept': 'application/json',
'Content-Type': 'multipart/form-data'

例如,数据是

const data = {
    ssid: 'SSIDNAME',
    password: 'SSIDPASSWORD',
}

然后创建表单数据:

const formData = new FormData();
for (key in data) {
    formData.append(key, data[key]);
}

获取将是:

fetch(url, {
    method: 'POST',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'multipart/form-data'
    },
    body: formData
})
© www.soinside.com 2019 - 2024. All rights reserved.