|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2022/7/2 17:19:14 |
标题: |
请问TNETHttpClient的请求头在哪里? |
浏览:1222 |
|
加入我的收藏 |
楼主: |
因程序需要读出TNETHttpClient的请求头(不是响应头),在网上找的帖子说是CustHeaders属性,但是可能是因为版本问题,这个控件没有这个属性,我用的是delphixe10.1,求帮助!再请看看你们的有没有这个属性,有的话请告诉我delphi的版本号,谢谢!
----------------------------------------------
|
作者: |
|
2022/7/2 17:25:11 |
1楼: |
请求的话,那个头,不是应该请求的人自己决定的么?既然是你决定的,那个头就是你加进去的,而不是你需要从里面读出来的。
如何加进去?我看了一下代码:
function TNetHTTPClient.Get(const AURL: string; const AResponseContent: TStream; const AHeaders: TNetHeaders): IHTTPResponse;
也就是说这个 Get 方法里面,就有个 AHeaders 是需要你加进去的请求头。
----------------------------------------------
-
|
作者: |
|
2022/7/2 17:33:29 |
2楼: |
不是,我是想取出TNetHTTPClient的默认的请求头
----------------------------------------------
|
作者: |
|
2022/7/2 17:36:42 |
2楼: |
另外,它有两个相关的属性,怎么用我没研究。代码是这样的:
property CustomHeaders[const AName: string]: string read GetCustomHeaderValue write SetCustomHeaderValue;
property CustHeaders: TURLHeaders read GetCustHeaders;
----------------------------------------------
-
|
作者: |
|
2022/7/2 17:41:14 |
3楼: |
CustomHeaders是用Name取出值的,CustHeaders这个属性就是找不到啊,你用的delphi是什么版本?
----------------------------------------------
|
作者: |
|
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 需要短信接口的请联系我,可发行业与营销内容。
|
作者: |
|
2022/7/3 9:58:02 |
5楼: |
感谢以上两位朋友的解答,对我很有启发,谢谢!
----------------------------------------------
|
作者: |
|
2022/7/5 9:17:59 |
6楼: |
写个小程序,然后抓一下流量包,那个请求头就一目了然,然后自己想怎么修改就怎么修改了。
从程序里面抓默认的请求头,这个好像一般没有需求,只有设定请求头的需求。
----------------------------------------------
-
|
|