DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 23
在线用户: 16
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
普通会员
2022/7/2 17:19:14
标题:
请问TNETHttpClient的请求头在哪里? 浏览:1222
加入我的收藏
楼主: 因程序需要读出TNETHttpClient的请求头(不是响应头),在网上找的帖子说是CustHeaders属性,但是可能是因为版本问题,这个控件没有这个属性,我用的是delphixe10.1,求帮助!再请看看你们的有没有这个属性,有的话请告诉我delphi的版本号,谢谢!
----------------------------------------------
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/7/2 17:25:11
1楼: 请求的话,那个头,不是应该请求的人自己决定的么?既然是你决定的,那个头就是你加进去的,而不是你需要从里面读出来的。

如何加进去?我看了一下代码:

function TNetHTTPClient.Get(const AURL: string; const AResponseContent: TStream;
  const AHeaders: TNetHeaders): IHTTPResponse;

也就是说这个 Get 方法里面,就有个 AHeaders 是需要你加进去的请求头。
----------------------------------------------
-
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
普通会员
2022/7/2 17:33:29
2楼: 不是,我是想取出TNetHTTPClient的默认的请求头
----------------------------------------------
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/7/2 17:36:42
2楼: 另外,它有两个相关的属性,怎么用我没研究。代码是这样的:

property CustomHeaders[const AName: string]: string read GetCustomHeaderValue write SetCustomHeaderValue;

property CustHeaders: TURLHeaders read GetCustHeaders;
----------------------------------------------
-
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
普通会员
2022/7/2 17:41:14
3楼: CustomHeaders是用Name取出值的,CustHeaders这个属性就是找不到啊,你用的delphi是什么版本?
----------------------------------------------
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/7/2 17:57:31
3楼: 楼主,你的问题其实通过你想要的办法,是没法解决的。

这个玩意如果没被执行,你读它的请求头,应该是没有的。

如果被执行了,读它的头,应该就是应答的页面的头了。

我猜你是想知道执行一个 http Get 的时候,在这个 Get 里面,发送给服务器都发了一些什么。

如果是这样,你可以用 Sniffer 去抓包来看。把它发出去的请求包抓出来看。当然,如果是 https 因为加密,你可能看不到能阅读的内容。如果是 http 那就肯定能看到。

再说一遍,这个 http 的请求,比如一个 get 请求,头里面可以是很简单的内容,也可以你自己根据服务器端的要求,增加一些内容。内容一般都是 Name:Value 的格式。

首先你要搞清楚你的请求是 Get 还是 POST;
如果是 GET,它应该不会有什么特别的东西,你把一个 URL 输入到浏览器地址栏回车,就是向服务器发送一个 GET,浏览器能产生什么请求头,它产生的应该也一样。

如果是 PUT,那要看服务器端需要你提供什么信息。可以自己去组建这个头。

比如我研究微软的 Azure 云服务,在客户端如何用 Delphi 的代码去调用它,我就是用 Sniffer 的方式抓包看。直接浏览器地址栏输入 URL 然后抓包看它发出去的字符串是什么。详细的内容在这里:
https://blog.csdn.net/pcplayer/article/details/86763311

你甚至可以自己用 Delphi 的 WebBroker 写一个简单的 WEB 服务器,然后你去访问,看看究竟来回的数据都是些什么,顺便就学习了 HTTP 协议。

简单说一下 HTTP 协议:本质上是客户端和服务器端的一个 TCP 连接,连接后,客户端发送一个文本给服务器端,服务器端的响应,也是返回一个文本给客户端。这个文本,符合 HTTP 协议的格式要求。

HTTP 的那些头,参数,等等,都在这个文本里面。

因此,如果你知道 HTTP 协议的规范,自己构建这个文本,然后,向服务器端建立一个 TCP 连接,通过 TCP 把文本发过去,就会完成一次 HTTP 请求,然后在 TCP 上读服务器端返回的文本。

至于 Delphi 的 IdHttpClient 或者这个 TNetHTTPClient 里面关于头的一些属性,本质上只是它内部解释了这个 HTTP 文本,把文本对应位置里面的 Name:Value 的文本内容通过面向对象的方式呈现出来。

比如那个所谓的 CustomHeaders 你可能通过代码增加了一个特别的头叫做 MyDoc,给它的值叫做 MyPic.Jpg 其实就是在 HTTP 请求的时候发送给服务器端的 HTTP 文本里面,增加了一行字符串,内容是:MyDoc:MyPic.jpg

然后在服务器端,如果是 WebBroker 架构你自己写的程序,它帮你解析了这个文本,你用代码获取客户提交的参数,就变成了大概是这样的代码:
AParam := Request.Params['MyDoc'];
然后,你读到的 AParam 的内容就是 MyPic.jpg;因此服务器端你的程序就知道客户端给的参数值是什么了。
----------------------------------------------
-
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2022/7/2 22:12:58
4楼: 可参考 http://www.2ccc.com/article.asp?articleid=6642

CustomHeaders['名称']:='值'

还有就是需要注意 ContentType 的定义

如果你提交utf8编码的内容,需要先进行编码

http get方法强制urlencode编码,post等等则需要根据对方接口的要求进行编码或者原样提交。

你可以通过一些http截包工具去查看http包的内容,对比你自己请求时发送的内容,进行调整。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 cenunus (cenunus) ★☆☆☆☆ -
普通会员
2022/7/3 9:58:02
5楼: 感谢以上两位朋友的解答,对我很有启发,谢谢!
----------------------------------------------
作者:
男 blueflag (昆了) ★☆☆☆☆ -
盒子活跃会员
2022/7/5 9:17:59
6楼: 写个小程序,然后抓一下流量包,那个请求头就一目了然,然后自己想怎么修改就怎么修改了。

从程序里面抓默认的请求头,这个好像一般没有需求,只有设定请求头的需求。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS