前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设置和获取HTTP标头

设置和获取HTTP标头

作者头像
用户7741497
发布于 2022-06-09 05:49:53
发布于 2022-06-09 05:49:53
2.6K00
代码可运行
举报
文章被收录于专栏:hml_知识记录hml_知识记录
运行总次数:0
代码可运行

设置和获取HTTP标头

设置和获取HTTP标头

可以设置和获取HTTP标头的值。

%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:

  • Authorization
  • ContentEncoding
  • ContentLength(此属性为只读。)
  • ContentType (指定Content-Type标头的Internet媒体类型(MIME类型)。)
  • ContentCharset (指定Content-Type标题的字符集部分。如果设置此属性,则必须首先设置ContentType属性。)
  • Date
  • From
  • IfModifiedSince
  • Pragma
  • ProxyAuthorization
  • Referer
  • UserAgent

%Net.HttpRequest类提供可用于设置和获取主HTTP标头的常规方法。这些方法忽略Content-Type和其他实体标头。

ReturnHeaders()

返回包含此请求中的主HTTP标头的字符串。

OutputHeaders()

将主HTTP标头写入当前设备。

GetHeader()

返回此请求中设置的任何主HTTP标头的当前值。此方法接受一个参数,即头的名称(不区分大小写);这是一个字符串,如Host或Date

SetHeader()

设置标题的值。通常,可以使用它来设置非标准标头;大多数常用标头都是通过Date等属性设置的。此方法有两个参数:

  • 标头的名称(不区分大小写),不带冒号()分隔符;这是一个字符串,如Host或Date
  • 标头值

不能使用此方法设置实体标头或只读标头(Content-LengthConnection)。

管理保活(Keep-alive)行为

如果重复使用%Net.HttpRequest的同一实例来发送多个HTTP请求,则默认情况下,InterSystems IRIS会使TCP/IP套接字保持打开状态,这样InterSystems IRIS就不需要关闭并重新打开它。

如果不想重复使用TCP/IP套接字,请执行以下任一操作:

  • 设置SocketTimeout属性为0。
  • 在你的HTTP请求中添加'Connection: close' HTTP头。 要做到这一点,在发送请求之前添加如下代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Set sc=http.SetHeader("Connection","close")

注意,每个请求之后都会清除HTTP请求头,因此需要在每个请求之前包含此代码。

%Net.HttpRequestSocketTimeout属性指定InterSystems IRIS将重用给定套接字的时间窗口(以秒为单位)。此超时旨在避免使用可能已被防火墙静默关闭的套接字。此属性的默认值为115。可以将其设置为不同的值。

处理HTTP请求参数

发送HTTP请求时(请参阅“发送HTTP请求”),可以在位置参数中包括参数;例如:"/test.html?PARAM=%25VALUE"PARAM设置为等于%value

还可以使用以下方法控制%Net.HttpRequest实例处理参数的方式:

InsertParam()

将参数插入到请求中。此方法接受两个字符串参数:参数的名称和参数的值。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 do req.InsertParam("arg1","1")

可以为给定参数插入多个值。如果这样做,这些值将接收从1开始的下标。在其他方法中,可以使用这些下标来引用目标值。

DeleteParam()

从请求中删除参数。第一个参数是参数的名称。第二个参数是要删除的值的下标;仅当请求包含同一参数的多个值时才使用此参数。

CountParam()

统计与给定参数关联的值数。

GetParam()

获取请求中给定参数的值。第一个参数是参数的名称。如果请求没有同名的参数,则第二个参数是要返回的默认值;该默认值的初始值为空值。第三个参数是要获取的值的下标;仅当请求包含同一参数的多个值时才使用此参数。

IsParamDefined()

检查是否定义了给定参数。如果参数有值,则此方法返回TRUE。参数与DeleteParam()相同。

NextParam()

通过$order()对参数名称进行排序后,检索下一个参数的名称(如果有)。

ReturnParams()

返回此请求中的参数列表。

包括请求正文

HTTP请求可以包括请求正文或表单数据。要包括请求正文,请执行以下操作:

  1. 创建%GlobalBinaryStream的实例或子类。将此实例用于HTTP请求的EntityBody属性。
  2. 使用标准流接口将数据写入此流。例如:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Do oref.EntityBody.Write("Data into stream")

例如,可以读取一个文件并将其用作自定义HTTP请求的实体正文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    set file=##class(%File).%New("G:\customer\catalog.xml")
    set status=file.Open("RS")
    if $$$ISERR(status) do $System.Status.DisplayError(status)
    set hr=##class(%Net.HttpRequest).%New()
    do hr.EntityBody.CopyFrom(file)
    do file.Close()

发送分块请求

如果使用的是HTTP1.1,则可以分块发送HTTP请求。这涉及到设置Transfer-Encoding以指示消息已分块,并使用大小为零的块来指示完成。

服务器返回大量数据并且在完全处理请求之前不知道响应的总大小时,分块编码非常有用。在这种情况下,通常需要缓冲整个消息,直到可以计算出内容长度(%Net.HttpRequest会自动计算)。

要发送分块请求,请执行以下操作:

  1. 创建%Net.ChunkedWriter的子类,%Net.ChunkedWriter是定义以块形式写入数据的接口的抽象流类。在这个子类中,实现OutputStream()方法。
  2. %Net.HttpRequest的实例中,创建%Net.ChunkedWriter子类的实例,并用要发送的请求数据填充它。
  3. %Net.HttpRequest实例的EntityBody属性设置为等于此%Net.ChunkedWriter实例。

当发送HTTP请求时(请参见“发送HTTP请求”),它将调用EntityBody属性的OutputStream()方法。

%Net.ChunkedWriter的子类中,OutputStream()方法应该检查流数据,决定是否分块以及如何分块,并调用类的继承方法来编写输出。

有以下方法可用:

WriteSingleChunk()

接受字符串参数并将该字符串作为非分块输出写入。

WriteFirstChunk()

接受字符串参数。写入适当的Transfer-Encoding标题以指示分块的消息,然后将字符串作为第一个分块写入。

WriteChunk()

接受字符串参数并将字符串作为块写入。

WriteLastChunk()

接受字符串参数,并将字符串作为块写入,后跟零长度块以标记结尾。

如果非NULL,则TranslateTable属性指定用于在写入时转换每个字符串的转换表。前面的所有方法都检查此属性。

发送表单数据

HTTP请求可以包括请求正文或表单数据。要包括表单数据,请使用以下方法:

InsertFormData()

将表单数据插入到请求中。此方法接受两个字符串参数:表单项的名称和关联值。可以为给定表单项插入多个值。如果这样做,值将接收从1开始的下标。在其他方法中,可以使用这些下标来引用目标值

DeleteFormData()

从请求中删除表单数据。第一个参数是表单项的名称。第二个参数是要删除的值的下标;仅当请求包含同一表单项的多个值时才使用此参数。

CountFormData()

统计请求中与给定名称关联的值数。

IsFormDataDefined()

检查是否定义了给定的名称

NextFormData()

通过$order()对名称进行排序后,检索下一个表单项的名称(如果有)。

例1

插入表单数据后,通常调用Post()方法。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Do httprequest.InsertFormData("element","value")
    Do httprequest.Post("/cgi-bin/script.CGI")

例2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Set httprequest=##class(%Net.HttpRequest).%New()
    set httprequest.SSLConfiguration="MySSLConfiguration"
    set httprequest.Https=1
    set httprequest.Server="myserver.com"
    set httprequest.Port=443
    Do httprequest.InsertFormData("portalid","2000000")
    set tSc = httprequest.Post("/url-path/")
    Quit httprequest.HttpResponse

插入、列出和删除Cookie

%Net.HttpRequest自动管理从服务器发送的Cookie;如果服务器发送Cookie%Net.HttpRequest实例将在下一次请求时返回此Cookie。(要使此机制正常工作需要重用%Net.HttpRequest的同一实例。)

使用以下方法管理%Net.HttpRequest实例中的Cookie

InsertCookie()

Cookie插入到请求中。指定以下参数:

  • Cookie的名称。
  • Cookie的值。
  • 应存储Cookie的路径。
  • 要从中下载Cookie的计算机的名称。
  • Cookie过期的日期和时间。

GetFullCookieList()

返回Cookie的数量,并(通过引用)返回Cookie数组。

DeleteCookie()

请记住,Cookie是特定于HTTP服务器的。当插入Cookie时,使用的是到特定服务器的连接,而该Cookie在其他服务器上不可用。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
03.Django基础三之视图函数
  一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
changxin7
2019/09/29
5K0
03.Django基础三之视图函数
Django学习笔记之Django视图View
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。 一个简单的视图 下面是一个以HTML文
Jetpropelledsnake21
2018/07/04
1.9K0
Django请求和响应对象
当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求的元数据。然后,Django 加载相应的视图,将 HttpRequest 作为视图函数的第一个参数。每个视图负责返回一个 HttpResponse 对象。
zy010101
2021/11/01
1.6K0
python 终极篇 --- django
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
py3study
2020/01/19
1.7K0
python 终极篇 --- django
【愚公系列】2022年01月 Python教学课程 46-Django框架之HttpRequest
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
愚公搬代码
2022/12/01
1K0
【愚公系列】2022年01月 Python教学课程 46-Django框架之HttpRequest
发送HTTP请求
可以创建%Net.HttpRequest的实例来发送各种HTTP请求并接收响应。此对象相当于Web浏览器,可以使用它发出多个请求。它会自动发送正确的cookie,并根据需要设置Referer标头。
用户7741497
2022/06/09
1.3K0
面试 HTTP ,99% 的面试官都爱问这些问题
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
cxuan
2020/04/21
1.4K0
面试 HTTP ,99% 的面试官都爱问这些问题
HTTP cookies 详解
HTTP cookies,通常称之为“cookie”,已经存在很长时间了,但是仍然没有被充分理解。首要问题是存在许多误解,认为 cookie 是后门程序或病毒,却忽视了其工作原理。第二个问题是,对于 cookie 的操作缺少统一的接口。尽管存在这些问题,cookie 仍旧在 Web 开发中扮演者重要的角色,以至于如果没有出现相应的代替品就消失的话,我们许多喜欢的 Web 应用将变的不可用。 cookie 的起源 早期的 Web 应用面临的最大问题之一就是如何维持状态。简言之,服务器无法知道两个请求是否来自于
小小科
2018/05/04
2K0
【Tomcat】《How Tomcat Works》英文版GPT翻译(第三章)
As mentioned in Introduction, there are two main modules in Catalina: the connector and the container. In this chapter you will enhance the applications in Chapter 2 by writing a connector that creates better request and response objects. A connector compliant with Servlet 2.3 and 2.4 specifications must create instances of javax.servlet.http.HttpServletRequest and javax.servlet.http.HttpServletResponse to be passed to the invoked servlet's service method. In Chapter 2 the servlet containers could only run servlets that implement javax.servlet.Servlet and passed instances of javax.servlet.ServletRequest and javax.servlet.ServletResponse to the service method. Because the connector does not know the type of the servlet (i.e. whether it implements javax.servlet.Servlet, extends javax.servlet.GenericServlet, or extends javax.servlet.http.HttpServlet), the connector must always provide instances of HttpServletRequest and HttpServletResponse.
阿东
2024/01/08
2760
【Tomcat】《How Tomcat Works》英文版GPT翻译(第三章)
爬虫系列(14)Scrapy 框架-模拟登录-Request、Response。
通常,Request对象在爬虫程序中生成并传递到系统,直到它们到达下载程序,后者执行请求并返回一个Response对象,该对象返回到发出请求的爬虫程序。
野原测试开发
2019/07/10
1.6K0
爬虫系列(14)Scrapy 框架-模拟登录-Request、Response。
Django之views系统
Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。 一
人生不如戏
2018/04/12
2.3K0
Django之views系统
Django模板语言与视图(view)
  的命名包括任何字母数字以及下划线 ("_")的组合(不提倡数字开头)。 变量名称中
py3study
2020/01/19
3.5K0
Django模板语言与视图(view)
TCP/IP协议族(二) HTTP报文头解析
本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每个值之间有逗号分隔。如果该值需要优先级,那么在值的后方跟上优先级q=0.8(q的值由0~1,优先级从低到高)。值与优先级中间由分号相隔。 头部字段名:值1, 值2;q=0.8 下方就是截取的网络请求中Request Headers的部分内容。红框中的Accept-Language就是头部字段名,冒号后边就是
lizelu
2018/01/11
1.3K0
TCP/IP协议族(二) HTTP报文头解析
前后端数据交互(四)——fetch 请求详解
fetch 是 XMLHttpRequest 的升级版,使用js脚本发出网络请求,但是与 XMLHttpRequest 不同的是,fetch 方式使用 Promise,相比 XMLHttpRequest 更加简洁。所以我们告别XMLHttpRequest,引入 fetch 如何使用?
呆呆
2021/09/30
3.1K0
认识ASP.NET MVC的5种AuthorizationFilter
在总体介绍了筛选器及其提供机制(《深入探讨ASP.NET MVC的筛选器》)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFilter。从命名来看,AuthorizationFilter用于完成授权相关的工作,所以它应该在Action方法被调用之前执行才能起到授权的作用。不仅限于授权,如果我们希望目标Action方法被调用之前中断执行的流程“做点什么”,都可以以AuthorizationFilter的形式来实现。[本文已经同步到《How ASP.N
蒋金楠
2018/01/15
1.5K0
认识ASP.NET MVC的5种AuthorizationFilter
Django之视图层与模板层
视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应.
GH
2019/12/16
9.3K0
发送HTTP请求
发出HTTP POST请求。使用此方法可将数据(如表单结果)发送到Web服务器,或上载文件。有关示例,请参阅“发送表单数据”。
用户7741497
2022/06/09
2.3K0
Java 编程问题:十三、HTTP 客户端和 WebSocket API
本章包括 20 个问题,旨在介绍 HTTP 客户端和 WebSocket API。
ApacheCN_飞龙
2022/07/11
6.9K0
Go Web编程--深入学习解析HTTP请求
之前这个系列的文章一直在讲用 Go语言怎么编写HTTP服务器来提供服务,如何给服务器配置路由来匹配请求到对应的处理程序,如何添加中间件把一些通用的处理任务从具体的Handler中解耦出来,以及如何更规范地在项目中应用数据库。不过一直漏掉了一个环节是服务器接收到请求后如何解析请求拿到想要的数据, Go语言使用 net/http包中的 Request结构体对象来表示 HTTP请求,通过 Request结构对象上定义的方法和数据字段,应用程序能够便捷地访问和设置 HTTP请求中的数据。
KevinYan
2020/02/26
1.7K0
package http
要管理代理、TLS配置、keep-alive、压缩和其他设置,创建一个Transport:
李海彬
2018/07/26
4K0
package http
相关推荐
03.Django基础三之视图函数
更多 >
LV.1
中国地质大学(武汉)博士
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档