发送带字符串参数的 formData POST 请求
Send formData POST request with string parameter
我有环回 API,我想发送 POST 请求。这是 API 所要求的:
在android中,我是这样做的:
public static Api getRetrofit(String token) {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(chain -> {
Request original = chain.request();
Request.Builder builder = original.newBuilder()
.addHeader("x-access-token", token)
.method(original.method(),original.body());
return chain.proceed(builder.build());
});
String token = mEtToken.getText().toString();
String password = mEtPassword.getText().toString();
User user = new User();
user.setNewPassword(password);
resetPasswordFinishProgress(user);
而且有效。
现在,在 HTML 形式的网站上,我有一个 javascript 功能,在我发送请求的地方,我从 API 收到一条响应消息,代码为 400
说:
{"error":{"statusCode":400,"name":"Error","message":"newPassword is a required argument","stack":"Error: newPassword is a required argument\n
这是函数:
function post() {
const urlParams = new URLSearchParams(window.location.search);
const token = urlParams.get('access_token');
console.log("TOKEN:", token);
const user = {
newPassword: document.querySelector('#input-password-check').value,
}
const http = new XMLHttpRequest()
http.open('POST', 'https://www.example.com/Users/reset-password')
http.setRequestHeader('x-access-token', token)
http.send(JSON.stringify(user))
console.log(JSON.stringify(user))
http.onload = function() {
alert(http.responseText)
}
}
日志打印如下:
{"newPassword":"mypass"}
我做错了什么?在我看来,它与 android.
中的一样
如果有帮助,这是来自 Loopback 的 CURL 调用 API:
curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'newPassword=s' 'https://www.example.com:3000/Users/reset-password?access_token=qRBj0mQYB8MHz6p8MHz68MHz6RBj0mQYB8MHz6RBj0mQYB8MHz6
我自己发现了问题。
我只设置了授权header,服务器端没有得到我发送的json
内容,我不得不再添加一个header Content-Type
:
const http = new XMLHttpRequest()
http.open('POST', 'https://www.example.com/Users/reset-password')
http.setRequestHeader('x-access-token', token)
http.setRequestHeader('Content-Type', 'application/json')
http.send(JSON.stringify(user))
console.log(JSON.stringify(user))
http.onload = function() {
alert(http.responseText)
}
我有环回 API,我想发送 POST 请求。这是 API 所要求的:
在android中,我是这样做的:
public static Api getRetrofit(String token) {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(chain -> {
Request original = chain.request();
Request.Builder builder = original.newBuilder()
.addHeader("x-access-token", token)
.method(original.method(),original.body());
return chain.proceed(builder.build());
});
String token = mEtToken.getText().toString();
String password = mEtPassword.getText().toString();
User user = new User();
user.setNewPassword(password);
resetPasswordFinishProgress(user);
而且有效。
现在,在 HTML 形式的网站上,我有一个 javascript 功能,在我发送请求的地方,我从 API 收到一条响应消息,代码为 400
说:
{"error":{"statusCode":400,"name":"Error","message":"newPassword is a required argument","stack":"Error: newPassword is a required argument\n
这是函数:
function post() {
const urlParams = new URLSearchParams(window.location.search);
const token = urlParams.get('access_token');
console.log("TOKEN:", token);
const user = {
newPassword: document.querySelector('#input-password-check').value,
}
const http = new XMLHttpRequest()
http.open('POST', 'https://www.example.com/Users/reset-password')
http.setRequestHeader('x-access-token', token)
http.send(JSON.stringify(user))
console.log(JSON.stringify(user))
http.onload = function() {
alert(http.responseText)
}
}
日志打印如下:
{"newPassword":"mypass"}
我做错了什么?在我看来,它与 android.
中的一样如果有帮助,这是来自 Loopback 的 CURL 调用 API:
curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'newPassword=s' 'https://www.example.com:3000/Users/reset-password?access_token=qRBj0mQYB8MHz6p8MHz68MHz6RBj0mQYB8MHz6RBj0mQYB8MHz6
我自己发现了问题。
我只设置了授权header,服务器端没有得到我发送的json
内容,我不得不再添加一个header Content-Type
:
const http = new XMLHttpRequest()
http.open('POST', 'https://www.example.com/Users/reset-password')
http.setRequestHeader('x-access-token', token)
http.setRequestHeader('Content-Type', 'application/json')
http.send(JSON.stringify(user))
console.log(JSON.stringify(user))
http.onload = function() {
alert(http.responseText)
}