微信开发之Post请求的示例分析
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章给大家分享的是有关微信开发之Post请求的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.post请求wx.request(OBJECT)wx.reque
千家信息网最后更新 2024年09月22日微信开发之Post请求的示例分析
这篇文章给大家分享的是有关微信开发之Post请求的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1.post请求
wx.request(OBJECT)
wx.request
发起的是 HTTPS 请求。一个微信小程序,同时只能有5个网络请求连接。
官网上描述
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
url | String | 是 | 开发者服务器接口地址 |
data | Object、String | 否 | 请求的参数 |
header | Object | 否 | 设置请求的 header , header 中不能设置 Referer |
method | String | 否 | 默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT |
success | Function | 否 | 收到开发者服务成功返回的回调函数,res = {data: '开发者服务器返回的内容'} |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
微信小程序示例
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) }})
这种请求GET方式是ok的,header头也可以不用添加。
但是POST就有比较大的问题了。
我使用以下代码进行调试(代码一):
wx.request({ url: ApiHost + '/?service=default.getOrderInfo', data: { 'order_id': order_id }, method: 'POST', success: function (res) { // console.log(res); if (res.data.ret == 200) { //something to do } else{ //something to do } } fail: function (res) { console.log(res); } });
注意看下图,微信开发工具里面的提示:
POST 请求会将data的值放在Request Payload里面,而不是Query String Parameters里面,后端服务器如果不注意,就无法取到数据。
网上很多改法,是这样的。----加上header头
wx.request({ url: ApiHost + '/?service=default.getOrderInfo', data: { //数据urlencode方式编码,变量间用&连接,再post 'order_id='+order_id }, method: 'POST', header:{ 'content-type':'application/x-www-form-urlencoded' }, success: function (res) { // console.log(res); if (res.data.ret == 200) { //something to do } else{ //something to do } } fail: function (res) { console.log(res); } });
这样修改的话,后端可以不用特别处理。
但是............
因为还是想用标准的方法做,那只有修改后端服务器啦。
我这边使用的是Phalapi框架,推荐下~~~
if(DI()->request->getHeader('content-type')){ $contentType = DI()->request->getHeader('content-type');}if(!empty($contentType)&&(strtolower(@$contentType) === 'application/json')){ $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : "{}"; DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true)));}
终于,在pc上用代码一调试通过。用上标准请求,也不用application/x-www-form-urlencoded这种模式。
不过.....用上真机调试,怎么又接收不到请求参数了。怪事。。。。。。。。。
最后通过抓包分析
真机端
POST /?service=default.getOrderInfo HTTP/1.0Host: proxyConnection: closeContent-Length: 43Content-Type: application/jsonAccept-Encoding: gzip, deflateAccept: */*User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 MicroMessenger/6.5.1 NetType/WIFI Language/zh_CNReferer: https://servicewechat.com/###/0/page-frame.htmlAccept-Language: zh-cn{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}
pc模拟开发端
POST /?service=default.getOrderInfo HTTP/1.0Host: proxyConnection: closeContent-Length: 43Origin: http://###.appservice.open.weixin.qq.comX-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 appservice webview/100000content-type: application/jsonAccept: */*Referer: https://servicewechat.com/####/devtools/page-frame.htmlAccept-Encoding: gzip, deflate, br{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}
最后找到区别:
Content-Type 与 content-type
模拟器默认是content-type
真机默认是Content-Type
后端服务器增加处理Content-Type 就搞定了。
感谢各位的阅读!关于"微信开发之Post请求的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
开发
服务
服务器
示例
接口
分析
不用
代码
内容
函数
参数
开发者
成功
地址
数据
方式
更多
标准
程序
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库设计时有哪些实体
警务通数据库
鹤壁软件开发大学
网络安全法组成
北京联想软件开发
数据库题例
山东绅克斯互联网科技是干嘛的
网络安全服务公司知乎
数据库技术与应用教学方法
为什么在激活时数据库会错误
直销软件开发北京
马云会不会软件开发
壹双软件开发
测试数据库被删了
使用本地iis服务器
金蝶软件开发工资待遇
最大的中医数据库
戴尔t140服务器说明书
汽车网络安全质量管理
淮安互联网软件开发价钱
地表反射率数据库
家庭用电脑如何做服务器
宁夏联想服务器维修哪家好
禹城租房软件开发
网络安全设备更新不及时
武汉临空港网络安全学院招聘
网络安全产品哪个牌子好
数据库中怎么替换表
sdk表示软件开发包的是
地产公司成本大数据库