DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 21
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zhangpuqing (pupu) ★☆☆☆☆ -
普通会员
2019/6/14 17:10:12
标题:
关于用nethttpclient控件的POST操作的问题 浏览:1985
加入我的收藏
楼主: 最近在做接口的调试,用nethttpclient来进行相关操作。部分数据是用get方法来操作的,没有问题。但有个数据是用post来操作的,始终报错,用了抓包分析工具发现没有发送数据出去。但找不出代码的问题,请大家帮忙看看。
关键部分代码如下:
procedure TTabbedwithNavigationForm.Button3Click(Sender: TObject);
var joj,jodata:tjsonobject;      
    jadata:tjsonarray;
    ss:tstringstream;        
    aresponse:ihttpresponse;
begin
 .........
  ss:=tstringstream.Create('',tencoding.UTF8);
  ss.WriteString(jodata.ToString);
  showmessage(inttostr(length(jodata.ToString)));

  nethttpclient1.Accept:='*/*';
  nethttpclient1.AcceptEncoding:='gzip,deflate';
  nethttpclient1.AcceptLanguage:='zh-CN';
  nethttpclient1.UserAgent:='Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko';
  nethttpclient1.ContentType:='application/json';
  nethttpclient1.CustomHeaders['Authorization']:=au_edit.Text;

  aresponse:=nethttpclient1.Post(lbltitle4.Text,ss);
  memo3.Lines.Add(aresponse.ContentAsString());

  ss.Free;
end;

运行代码后返回错误提示如下:
{"timestamp":"2019-06-14 16:53:37","status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Required request body is missing: public com.qianfan123.sail.inf.service.ResponseResult<java.util.List<com.qianfan123.sail.inf.service.mbr.coupon.v2.CouponVT>> com.qianfan123.sail.inf.server.mbr.coupon.v2.CouponServiceVTImpl.issue(java.lang.String,java.lang.String,java.lang.String,com.qianfan123.sail.inf.service.mbr.coupon.v2.CouponIssueVTDTO)","path":"/api/mbr/v2/coupon/issue"}

通过抓包软件分析获取的正确执行的会话信息如下(*号是屏弊部分):
POST http://**********/api/mbr/v2/coupon/issue HTTP/1.1
Content-Type: application/json
Accept: */*
Authorization: **********
Referer: http://**********/swagger-ui.html
Accept-Language: zh-CN
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Length: 366
Host: ****.****.****:6020
Connection: Keep-Alive
Pragma: no-cache

{"event":"string","lines":[{"amount":"1000","beginDate":"2019-06-14 16:02:14","categoryCode":"000275","code":"20190614160214","count":"1","endDate":"2019-06-14 16:02:14"}],"memberId":"135057337785253888","occuredAt":"****","occuredTime":"2019-06-14 16:02:14","orgCode":"****","ownerActivity":"pos","summary":"测试","terminal":"01","transId":"20190614160214"}
HTTP/1.1 200
X-Application-Context: member-inf:10000
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 14 Jun 2019 08:04:27 GMT

1d7
{"status":"0000","message":"请求成功","data":[{"orgCode":"****","memberId":"******","code":"20190614160214","categoryId":"*****4","categoryCode":"******","name":"TIMTEST","type":"cash","facedAmt":1000,"amount":1000,"effectBegin":"2019-06-14 00:00:00","effectEnd":"2019-06-14 23:59:59","state":"可使用","fixed":true,"discount":null,"storeCode":null,"useLimitAmount":null,"isRegifted":-1,"limitRegiftedNum":null,"remainRegiftedNum":null}]}
0

而错误的抓包信息如下:(*号是屏弊部分)
POST http://*.*.*.*:6020/api/mbr/v2/coupon/issue HTTP/1.1
Content-Type: application/json
Accept: */*
Authorization:**********

Accept-Language: zh-CN
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: *.*.*.*:6020
Content-Length: 0----------
Connection: Keep-Alive


HTTP/1.1 400
X-Application-Context: member-inf:10000
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 14 Jun 2019 08:21:33 GMT
Connection: close

21f
{"timestamp":"2019-06-14 16:21:33","status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Required request body is missing: public com.qianfan123.sail.inf.service.ResponseResult<java.util.List<com.qianfan123.sail.inf.service.mbr.coupon.v2.CouponVT>> com.qianfan123.sail.inf.server.mbr.coupon.v2.CouponServiceVTImpl.issue(java.lang.String,java.lang.String,java.lang.String,com.qianfan123.sail.inf.service.mbr.coupon.v2.CouponIssueVTDTO)","path":"/api/mbr/v2/coupon/issue"}
0

分析了下,抓包的差异主要在于错误部分缺少了:
Pragma: no-cache

{"event":"string","lines":[{"amount":"1000","beginDate":"2019-06-14 16:02..........
这段数据。也就是发送部分的数据感觉没有出去。

根据错误的提示应该是post时没有body主体,但不知该怎么解决,还请各位出手解救,谢谢。
----------------------------------------------
-
作者:
男 zhangpuqing (pupu) ★☆☆☆☆ -
普通会员
2019/6/14 17:33:30
1楼: 继续研究中。
感觉POST数据应该是做在BODY中,而目前是在HEAD中发送的。怎么改变发送的位置呢?
----------------------------------------------
-
作者:
男 zhangpuqing (pupu) ★☆☆☆☆ -
普通会员
2019/6/14 17:40:42
2楼: 解决了。论坛里有个朋友也遇到了跟我一样的问题,结果不是什么body,head的问题,而是那个数据流写入后需要将其Position:=0,即可。如下:
  ss:=tstringstream.Create('',tencoding.UTF8);
  ss.WriteString(jodata.ToString);
  ss.Position:=0;
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2019/6/28 8:13:14
3楼: 多谢楼上分享!

----------------------------------------------
-我的博客
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2020/7/12 18:06:42
5楼: 楼上还是先找找你老婆每天去哪里了吧。为什么你的帽子总是绿色的!!
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2020/7/12 18:28:49
6楼: Stream 设置个位置0 就可以了。或者直接提交字符串
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行39.0625毫秒 RSS