我为Django API项目编写了一个基于angular的客户端应用程序。其中一个endpoint接受application/x-www-form-urlencoded格式的请求,因为它同时包含文件和字符串数据,我很确定它在服务器端工作正常——我已经使用POSTMAN准备了一个application/x-www-form-urlencoded请求:
HEADERS:
Content-Type: application/x-www-form-urlencoded
BODY (form-data):
experiment: http://127.0.0.1:8000/api/v1/experiments/6/
measurement: http://127.0.0.1:8000/api/v1/measurements/4/
variable:
x_axis: X_AXIS
y_axis: Y_AXIS
file_object: // here I've changed the field type and chose the .txt file
当然,服务器响应正确,并且已添加文件。以下是确切请求正文的样子:
experiment=http://127.0.0.1:8000/api/v1/experiments/6/measurement=http://127.0.0.1:8000/api/v1/measurements/4/variable=x_axis=os Xy_axis=os Yfile_obj=[object Object]
但是现在,事情变得越来越复杂。我尝试使用反应式表单和HttpClient在Angular中准备相同的请求。假设反应式表单本身正常工作,但发送设置为“Content-Type”的请求:
以下是我发送请求的方式:
post(formGroup: FormGroup): Observable<DataFile> {
const httpOption = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded'
})
};
return this.httpClient.post<DataFile>(this.apiEndpoints.datafilesCreateEndpoint(), formGroup.value, httpOption);
}
下面是确切的请求:
{"experiment":"http://127.0.0.1:8000/api/v1/experiments/6/","measurement":"http://127.0.0.1:8000/api/v1/measurements/4/","variable":" ","x_axis":"X AXIS","y_axis":"Y AXIS","file_obj":"C:\\fakepath\\navon.txt"}
当我将Content-Type设置为不同的内容类型时,不知道为什么请求的表单数据是JSON。这可能是这个问题的原因吗?
@更新解决方案
我已经从post函数中删除了httpOptions,让Angular自动传递内容类型。然后,而不是通过FormGroup。对于httpClient的帖子,我创建了FormData,并将其传递给了其他人。
以下是我的POST函数的外观:
post(experiment: SharedModel, measurement: SharedModel, andOtherDataINeed: any): Observable<DataFile> {
const fd = new FormData();
fd.append('experiment', experiment as any);
...
fd.append('file_obj', file);
return this.httpClient.post<DataFile>(this.apiEndpoints.datafilesCreateEndpoint(), fd);
将原始代码更改为
return this.httpClient.post<DataFile>(this.apiEndpoints.datafilesCreateEndpoint(), new HttpParams({ fromObject: formGroup.value }));
FormData
作为multipart/form data
发送,而不是作为application/x-www-form-urlencoded
发送。
尝试研究Axios库https://github.com/axios/axios
如果您向下滚动,您会注意到您需要的示例。您可以毫无问题地在Angular应用程序中使用Axios。
在java中,如何使用。我不明白如何发送带有键值的正文,如上面的屏幕截图所示。 我尝试过以下代码: 但是在回复中,我没有收到正确的数据。
我正在尝试使用,但数据没有到达PHP。我认为这是因为当使用标题始终设置为
我试图用application/x-www-form-urlencoded设置一个http head manager元素;Charset=UTF-8“;param。我从postman获得所需的结果,但是这个设置有一个复选框。我需要对rest api项目使用JMeter。
问题内容: 我有一些要以表单编码形式发布到服务器的参数: 我正在这样发送我的请求(当前没有参数) 如何在请求中包含表单编码的参数? 问题答案: 对于上载表单编码的POST请求,我建议使用FormData对象。 示例代码:
我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容
我试图使用以下客户端代码调用REST服务,目的是发送一些字符串消息详细信息以及附件文件: 我的目标服务器接受Base64编码的内容,这就是为什么额外的从文件传输到ByteArray的原因。 此外,我发现类com.sun.jersey.core.impl.provider.entity.FormProvider用于生产和消费“x-www-form-urlencoded”请求。 但我还是得出了以下结论