Estou tentando fazer uma solicitação POST, mas não consigo fazer isso funcionar:
testRequest() {
var body = 'username=myusername?password=mypassword';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http
.post('/api',
body, {
headers: headers
})
.subscribe(data => {
alert('ok');
}, error => {
console.log(JSON.stringify(error.json()));
});
}
Basicamente, quero replicar essa solicitação http (não ajax) como se fosse originada por um formulário html:
URL: / api
Params: nome de usuário e senha
typescript
angular
Christopher
fonte
fonte
user_name
epassword
, stackoverflow.com/a/45879409/2803344Respostas:
Acho que o corpo não é correto para um
application/x-www-form-urlencoded
tipo de conteúdo. Você pode tentar usar isto:Espero que ajude você, Thierry
fonte
import { URLSearchParams } from "@angular/http"
e não o padrão, então 1) você não precisa fazer o.toString
nele, e 2) você não precisa definir o tipo de conteúdo. O Angular inferirá isso automaticamente para você (consulte github.com/angular/angular/blob/4.4.4/packages/http/src/… )Atualização para Angualar 4.3+
Agora podemos usar em
HttpClient
vez deHttp
O guia está aqui
Código de amostra
Descontinuada
Ou você pode fazer assim:
Atualização out / 2017
Do angular4 + , não precisamos
headers
, ou.toString()
coisas. Em vez disso, você pode fazer o exemplo abaixoMétodo POST / PUT
Método GET / DELETE
Para JSON
application/json
Content-Typefonte
import { URLSearchParams } from "angular2/http"
Em versões posteriores do Angular2, não há necessidade de definir manualmente o
Content-Type
cabeçalho e codificar o corpo se você passar um objeto do tipo correto comobody
.Você simplesmente pode fazer isso
Dessa forma, o angular codificará o corpo para você e definirá o
Content-Type
cabeçalho correto .PS Não se esqueça de importar
URLSearchParams
de@angular/http
ou não funcionará.fonte
FormData
e o angular irá definirContent-Type
comomultipart/form-data
também funcionam.então, apenas para torná-la uma resposta completa:
fonte
Essas respostas estão desatualizadas para aqueles que utilizam o HttpClient em vez do Http. Eu estava começando a enlouquecer pensando, "Fiz a importação de URLSearchParams, mas ainda não funciona sem .toString () e o cabeçalho explícito!"
Com HttpClient, use HttpParams em vez de URLSearchParams e observe a
body = body.append()
sintaxe para obter vários parâmetros no corpo, já que estamos trabalhando com um objeto imutável:fonte
Se alguém está lutando com a versão angular 4+ (a minha era 4.3.6) . Este foi o código de amostra que funcionou para mim.
Primeiro adicione as importações necessárias
Em seguida, para a função api. É um exemplo de login que pode ser alterado de acordo com suas necessidades.
fonte
Eu estava tendo problemas com cada abordagem usando vários parâmetros, mas funciona muito bem com um único objeto
api:
angular:
fonte
fonte
Aterrissei aqui quando estava tentando fazer algo semelhante. Para um tipo de conteúdo application / x-www-form-urlencoded, você pode tentar usar isso para o corpo:
com o que você tentou fazer, o valor atribuído ao corpo será uma string.
fonte