4
respostas

POST response NotFound

No metodo: register(String content) async { print(getURL); http.Response response = await http.post( Uri.parse(getURL), headers: { HttpHeaders.contentTypeHeader: 'application/json', HttpHeaders.acceptHeader: '/' }, body: jsonEncode({"content": content}), ); print("statuCode : ${response.statusCode}\n${response.body}"); } O retorno é:

I/flutter ( 5309): http://192.168.1.6:3000/learnhttp/ I/flutter ( 5309): statuCode : 404 I/flutter ( 5309): Not Found

Pelo PostMan funciona

usando o interceptor, percebi que mesmo chamando o metodo put ele envia um get, e por isso retorna notfound. Atenciosamente

Emerson

4 respostas

Olá Emerson!

O problema parece ta relacionado à URL ou ao método HTTP que está sendo utilizado:

Tenha ABSOLUTA CERTEZA de que a URL http://192.168.1.6:3000/learnhttp/ ta correta e acessível a partir do dispositivo onde o aplicativo Flutter tá sendo executado.

Você disse que, mesmo chamando o método POST, ele está enviando um GET. Isso pode ser um problema de configuração ou um comportamento inesperado da biblioteca HTTP. Verifique se o método POST está sendo realmente chamado.

Se você tá usando um interceptor, pode ser que ele esteja alterando o método HTTP, a configuração do interceptor para garantir que ele não esteja modificando a requisição de POST para GET.

Veja o endpoint /learnhttp/ existe e está configurado para aceitar requisições POST no servidor.

Ve se o dispositivo onde o aplicativo Flutter está sendo executado tem permissão para acessar a rede local. No arquivo AndroidManifest.xml, você precisa adicionar a permissão de internet:

<uses-permission android:name="android.permission.INTERNET"/>

Como você mencionou que funciona no Postman, compare as configurações da requisição no Postman com as configurações no Flutter, especialmente os cabeçalhos e o corpo da requisição.

Se ainda estiver enfrentando problemas, compartilha mais detalhes sobre como o interceptor está configurado, assim podemos analisar mais a fundo.

Abraço.

Bom dia Segue o Código:

import 'package:flutter_webapi_first_course/models/journal.dart'; import 'package:flutter_webapi_first_course/services/loggin_interceptors.dart'; import 'package:http/http.dart' as http; import 'package:http_interceptor/http_interceptor.dart';

class JornalService { static const String url = 'http://192.168.1.6:3000/'; static String resource = "journal/"; Client client = InterceptedClient.build(interceptors: [ LogginInterceptors(), ]);

String get getURL => "$url$resource";

register(Journal journal) async { http.Response response = await client.post(Uri.parse(getURL), headers: { "Content-type": "application/json", "Accept": "/", }, body: journal.toJson()); }

Future get() async { final http.Response response = await client.get(Uri.parse(getURL)); return response.body; } }

Pubspec

cupertino_icons: ^1.0.2 uuid: ^4.4.0 google_fonts: ^6.2.1 http: 1.2.1 http_interceptor: ^2.0.0-beta.8 logger: ^2.3.0

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

![Insira aqui a descrição dessa imagem para ajudar na acessibilidade](https://cdn1.gnarususercontent.com.br/1/6207337/8fbf98ab-8493-45e1-9fe1-e2b155a7e42f.png) 

Atenciosamente

Emerson

So para constar o GET e o PUT funcionam normalmente, apenas o POST não da certo!

Emerson

Desculpe, passei algo errado, onde eu disse que no postman havia funcionado, errei, nao verdade funcionou o PUT.

Depois disso eu encontrei o problema

Precisamos habilitar o CORS do json-server, e liberar o verbo POST e DELETE

nao estou conseguindo, o node diz que o modulo json-server nao existe:

const jsonServer = require('json-server') const server = jsonServer.create() const router = jsonServer.router('db.json') const middlewares = jsonServer.defaults({ noCors: true })

// Add custom middleware for CORS server.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); // Allow any origin res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); });

server.use(middlewares); server.listen(3000, () => { console.log('JSON Server is running'); });

Se alguem puder me ajudar eu agradeco.

Atenciosamente

Emerson