angularjs中$http模块发送post请求request payload转form data

背景: ionic+ angularjs+ cordova
在开发一个证书照片删除的时候,后端提供了一个post接口,需要前端将数据转化成form data。而在angularjs中,如果直接用post方式,发送数据是以Request Payload而不是以Form Data。

$http({
    method: 'POST',
    url: url,
    data: data
}).success(function () {});

运行结果: chrome
图片描述

这样后端是无法获取的。

解决办法:
1、对post进行配置

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        return str.join("&");
    },
    data: xsrf
}).success(function () {});

这样就能转化成form data数据让后端接收了。

2、使用jquery对数据进行处理
var data = $.param(data)

结尾:
最后没有用以上的任何一种方法解决。因为整个项目是用websocket方式(除了实名认证和添加证书时考虑断点续传用了http方式),经过一番套路,总监让后端改成用websocket的方式了,然后就没有然后了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了在 Python 3.6 发送 HTTP/2 POST 请求,你需要安装并使用一个第三方库,比如 httplib2 或者 hyper。 下面是使用 httplib2 库发送 HTTP/2 POST 请求的示例代码: ``` import httplib2 h = httplib2.Http('.cache', disable_ssl_certificate_validation=True) h.add_credentials('username', 'password') response, content = h.request( 'https://http2.example.com/post', 'POST', headers={'Content-Type': 'application/x-www-form-urlencoded'}, body='key1=value1&key2=value2' ) print(response.status) print(content) ``` 如果你想使用 hyper 库发送 HTTP/2 POST 请求,可以使用下面的代码: ``` import hyper s = hyper.Session() r = s.post( 'https://http2.example.com/post', headers={'Content-Type': 'application/x-www-form-urlencoded'}, data='key1=value1&key2=value2' ) print(r.status_code) print(r.text) ``` 希望这些信息对你有帮助! ### 回答2: 要在Python 3.6发送HTTP/2的POST请求,首先需要确保安装了相应的模块,比如`hyper`或`httpx`。以下是使用`httpx`模块发送HTTP/2的POST请求的示例代码: ```python import httpx async def post_request(): url = 'https://example.com' # 替换为目标网址 async with httpx.AsyncClient(http2=True) as client: payload = {'key1': 'value1', 'key2': 'value2'} # 替换为实际的请求参数 headers = {'Content-Type': 'application/x-www-form-urlencoded'} # 替换为实际的请求头部 response = await client.post(url, data=payload, headers=headers) print(response.text) # 需要使用asyncio运行异步函数 import asyncio asyncio.run(post_request()) ``` 在上述代码,`httpx`模块提供了HTTP/2的支持,通过设置`http2=True`参数来启用HTTP/2协议。`post_request()`函数是异步函数,使用`asyncio.run()`函数来运行。 请注意,这仅是一个简单的示例,实际情况下,您可能需要根据目标网址的要求和其他需要的参数进行相应的修改。 ### 回答3: 在Python 3.6,要发送HTTP/2的POST请求,可以使用`http.client`模块的`HTTPConnection`类。这个类提供了一种连接到HTTP服务器并发送请求的方法。 首先,我们需要创建一个HTTPConnection对象,将目标主机的服务器地址和端口作为参数传递给它。然后,我们可以使用request()方法来发送POST请求。我们还需要设置一些请求标头,例如Content-Type和Content-Length。 以下是一个示例代码的基本结构,展示了如何发送HTTP/2的POST请求: ```python import http.client # 创建HTTPConnection对象 conn = http.client.HTTPConnection("目标服务器地址", port=端口号) # 设置请求标头 headers = { 'content-type': 'application/json', 'content-length': '长度' } # 设置请求体 body = { 'key1': 'value1', 'key2': 'value2' } # 发送POST请求 conn.request("POST", "/目标路径", body, headers) # 获取响应 res = conn.getresponse() # 打印响应状态码和内容 print(res.status, res.read().decode()) ``` 请注意,以上示例代码只是一个基本结构,需要根据你的具体需求进行进一步修改。例如,将目标服务器地址、端口号和其它请求参数替换为正确的值。 此外,在使用以上代码之前,你需要在Python环境安装相应的依赖包,例如`hyper`、`h2`等,以确保支持HTTP/2协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值