Axios Http 客户端 - 如何使用表单参数构造 Http Post url
Axios Http client - How to construct Http Post url with form params
我正在尝试创建一个 postHTTP 请求,其中包含一些要设置的表单参数。我正在将 axios 与节点服务器一起使用。我已经有了构建 url 的 java 代码实现,如下所示:
JAVA 代码:
HttpPost post = new HttpPost(UriBuilder.fromUri (getProperty("authServerUrl"))
.path(TOKEN_ACCESS_PATH).build(getProperty("realm")));
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new NameValuePair("username",getProperty ("username")));
formParams.add(new NameValuePair("password",getProperty ("password")));
formParams.add(new NameValuePair("client_id, "user-client"));
我正在尝试在 axios 中做同样的事情。
AXIOS 实现:
axios.post(authServerUrl +token_access_path,
{
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}).then(function(response) {
console.log(response); //no output rendered
}
在 post 请求中设置这些表单参数的方法是否正确?
您必须执行以下操作:
var querystring = require('querystring');
//...
axios.post(authServerUrl + token_access_path,
querystring.stringify({
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}), {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(function(response) {
console.log(response);
});
为什么要引入另一个库或模块来使用纯 vanilla JavaScript 做如此简单的事情?只需一行 JS 代码即可生成要在 POST 请求中提交的所需数据。
// es6 example
const params = {
format: 'json',
option: 'value'
};
const data = Object.keys(params)
.map((key) => `${key}=${encodeURIComponent(params[key])}`)
.join('&');
console.log(data);
// => format=json&option=value
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data,
url: 'https://whatever.com/api',
};
const response = await axios(options); // wrap in async function
console.log(response);
我同意 jhickok,不需要引入额外的库,但是由于使用 Object.entries,他们的代码不会产生正确的结果,您会看到以下内容:
"format,json=0&option,value=1"
应该使用 Object.keys。
const obj = {
format: 'json',
option: 'value'
};
const data = Object.keys(obj)
.map((key, index) => `${key}=${encodeURIComponent(obj[key])}`)
.join('&');
console.log(data); // format=json&option=value
那当然...
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data,
url: 'https://whatever.com/api',
};
const response = await axios(options);
如果您的目标运行时 supports it,Axios 能够接受一个 URLSearchParams
实例,该实例也会将适当的 Content-type
header 设置为 application/x-www-form-urlencoded
axios.post(authServerUrl + token_access_path, new URLSearchParams({
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}))
fetch
API
也是如此
fetch(url, {
method: "POST",
body: new URLSearchParams({
your: "object",
props: "go here"
})
})
我正在尝试创建一个 postHTTP 请求,其中包含一些要设置的表单参数。我正在将 axios 与节点服务器一起使用。我已经有了构建 url 的 java 代码实现,如下所示:
JAVA 代码:
HttpPost post = new HttpPost(UriBuilder.fromUri (getProperty("authServerUrl"))
.path(TOKEN_ACCESS_PATH).build(getProperty("realm")));
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new NameValuePair("username",getProperty ("username")));
formParams.add(new NameValuePair("password",getProperty ("password")));
formParams.add(new NameValuePair("client_id, "user-client"));
我正在尝试在 axios 中做同样的事情。
AXIOS 实现:
axios.post(authServerUrl +token_access_path,
{
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}).then(function(response) {
console.log(response); //no output rendered
}
在 post 请求中设置这些表单参数的方法是否正确?
您必须执行以下操作:
var querystring = require('querystring');
//...
axios.post(authServerUrl + token_access_path,
querystring.stringify({
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}), {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(function(response) {
console.log(response);
});
为什么要引入另一个库或模块来使用纯 vanilla JavaScript 做如此简单的事情?只需一行 JS 代码即可生成要在 POST 请求中提交的所需数据。
// es6 example
const params = {
format: 'json',
option: 'value'
};
const data = Object.keys(params)
.map((key) => `${key}=${encodeURIComponent(params[key])}`)
.join('&');
console.log(data);
// => format=json&option=value
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data,
url: 'https://whatever.com/api',
};
const response = await axios(options); // wrap in async function
console.log(response);
我同意 jhickok,不需要引入额外的库,但是由于使用 Object.entries,他们的代码不会产生正确的结果,您会看到以下内容:
"format,json=0&option,value=1"
应该使用 Object.keys。
const obj = {
format: 'json',
option: 'value'
};
const data = Object.keys(obj)
.map((key, index) => `${key}=${encodeURIComponent(obj[key])}`)
.join('&');
console.log(data); // format=json&option=value
那当然...
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data,
url: 'https://whatever.com/api',
};
const response = await axios(options);
如果您的目标运行时 supports it,Axios 能够接受一个 URLSearchParams
实例,该实例也会将适当的 Content-type
header 设置为 application/x-www-form-urlencoded
axios.post(authServerUrl + token_access_path, new URLSearchParams({
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}))
fetch
API
fetch(url, {
method: "POST",
body: new URLSearchParams({
your: "object",
props: "go here"
})
})