获取不在React Native中发送正文

时间:2017-04-09 20:48:54

标签: react-native fetch-api

我试图通过本机应用程序将一些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

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题-Spring Boot服务可以从Postman接收POST正文,但是我收到的来自我的React应用的调用没有正文,并且Content-Length-1

经过一番狩猎,我遇到了https://github.com/github/fetch/issues/318#issuecomment-335086509。这使我学习了更多有关CORS的知识,并在Spring Boot应用程序的@RestController类中添加了以下内容:

@CrossOrigin(origins = WHITELISTED_AUTHORITY)

或者,React客户端fetch调用可以具有:

    headers: {
      Origin: AUTHORITY,
    }

从服务器上设置它会要求客户端发送该信息,这使客户端程序员不必做那么一件事,但是它可以(我不知道所有这些工作如何深入到可以肯定的- ,请修改此答案),从而导致客户端和服务器之间的往返次数增加。

答案 1 :(得分:0)

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

因此解决方案是将request.form更改为request.data或将fetch选项更改为将正文发送给request.form

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

subprocess.call()

例如,数据为

'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]);
}