创建HTTP请求后,使用以下方法之一发送该请求:
method Delete(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP DELETE请求。
method Get(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP GET请求。此方法使Web服务器返回请求的页面。
method Head(location As %String,
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP Head请求。此方法使Web服务器仅返回响应头,而不返回正文。
method Patch(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP修补程序请求。使用此方法可以对现有资源进行部分更改。
method Post(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP POST请求。使用此方法可将数据(如表单结果)发送到Web服务器,或上载文件。有关示例,请参阅“发送表单数据”。
method Put(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP PUT请求。使用此方法将数据上载到Web服务器。PUT请求并不常见。
method Send(type As %String,
location As %String,
test As %Integer = 0,
reset As %Boolean = 1) as %Status
将指定类型的HTTP请求发送到服务器。此方法通常由其他方法调用,但如果要使用不同的HTTP谓词,则提供此方法以供使用。此处type
是指定HTTP谓词(如“POST”
)的字符串。
在所有情况下:
HttpResponse
属性中。Location
参数是要请求的URL,例如:"/test.html"
。Location
参数可以包含参数,假定这些参数已经URL转义,例如:"/test.html?PARAM=%25VALUE"
将PARAM
设置为等于%VALUE
。test
为2
,则在发出HTTP
请求后将响应输出到当前设备。Reset()
方法,除非test=1
或Reset=0
。Reset()
方法重置%Net.HttpRequest
实例,以便它可以发出另一个请求。这比关闭此对象并创建新实例要快得多。这还会将Location
标头的值移动到Referer
标头。
Set httprequest=##class(%Net.HttpRequest).%New()
Set httprequest.Server="www.intersystems.com"
Do httprequest.Get("/")
要创建和发送多部分POST
请求,请使用%Net.MIMEPart
类,本书后面将详细讨论这些类。下面的示例发送包含两个部分的POST
请求。第一部分包括文件二进制数据,第二部分包括文件名。
ClassMethod CorrectWriteMIMEMessage3(header As %String)
{
// Create root MIMEPart
Set RootMIMEPart=##class(%Net.MIMEPart).%New()
//Create binary subpart and insert file data
Set BinaryMIMEPart=##class(%Net.MIMEPart).%New()
Set contentdisp="form-data; name="_$CHAR(34)_"file"_$CHAR(34)_"; filename="
_$CHAR(34)_"task4059.txt"_$CHAR(34)
Do BinaryMIMEPart.SetHeader("Content-Disposition",contentdisp)
Set stream=##class(%FileBinaryStream).%New()
Set stream.Filename="/home/tabaiba/prueba.txt"
Do stream.LinkToFile("/home/tabaiba/prueba.txt")
Set BinaryMIMEPart.Body=stream
Do BinaryMIMEPart.SetHeader("Content-Type","text/plain")
// Create text subpart
Set TextMIMEPart=##class(%Net.MIMEPart).%New()
Set TextMIMEPart.Body=##class(%GlobalCharacterStream).%New()
Do TextMIMEPart.Body.Write("/home/tabaiba/prueba.txt")
// specify some headers
Set TextMIMEPart.ContentType="text/plain"
Set TextMIMEPart.ContentCharset="us-ascii"
Do TextMIMEPart.SetHeader("Custom-header",header)
// Insert both subparts into the root part
Do RootMIMEPart.Parts.Insert(BinaryMIMEPart)
// create MIME writer; write root MIME message
Set writer=##class(%Net.MIMEWriter).%New()
// Prepare outputting to the HttpRequestStream
Set SentHttpRequest=##class(%Net.HttpRequest).%New()
Set status=writer.OutputToStream(SentHttpRequest.EntityBody)
if $$$ISERR(status) {do $SYSTEM.Status.DisplayError(status) Quit}
// Now write down the content
Set status=writer.WriteMIMEBody(RootMIMEPart)
if $$$ISERR(status) {do $SYSTEM.Status.DisplayError(status) Quit}
Set SentHttpRequest.Server="congrio"
Set SentHttpRequest.Port = 8080
Set ContentType= "multipart/form-data; boundary="_RootMIMEPart.Boundary
Set SentHttpRequest.ContentType=ContentType
set url="alfresco/service/sample/upload.json?"
_"alf_ticket=TICKET_caee62bf36f0ea5bd51194fce161f99092b75f62"
set status=SentHttpRequest.Post(url,0)
if $$$ISERR(status) {do $SYSTEM.Status.DisplayError(status) Quit}
}
发送HTTP
请求后,请求的HttpResponse
属性将更新。此属性是%Net.HttpResponse
的实例。本节介绍如何使用Response
对象。它包括以下主题:
HTTP响应的正文包含在响应的Data属性中。此属性包含流对象(特别是%GlobalBinaryStream
)。要使用此流,请使用标准流方法:Write()
、WriteLine()
、Read()
、ReadLine()
、Rewind()
、MoveToEnd()
和Clear()
。还可以使用流的Size
属性。
请求的ReadRawMode
属性控制如何读取响应正文。
HTTP
标头中指定的字符集内(并相应地转换该字符集)。还可以使用OutputToDevice()
方法,该方法将完整响应写入当前设备。标头的顺序与Web服务器生成的顺序不同。
下面是一个简单的示例,在该示例中,我们将响应流复制到文件并保存:
/// w ##class(PHA.TEST.HTTP).Stream()
ClassMethod Stream()
{
set request=##class(%Net.HttpRequest).%New()
set request.Server="tools.ietf.org"
set request.Https=1
set request.SSLConfiguration="yx"
set status=request.Get("/html/rfc7158")
if $$$ISERR(status) {
do $system.OBJ.DisplayError()
} else {
set response=request.HttpResponse
}
Set file=##class(%FileCharacterStream).%New()
set file.Filename="e:/temp/rfc7158.txt"
set status=file.CopyFrom(response.Data)
if $$$ISERR(status) {
do $system.OBJ.DisplayError()
}
do file.%Close()
q ""
}
%Net.HttpResponse
类将其HTTP
标头存储在InterSystems IRIS多维数组中。要访问标头,请使用以下方法:
返回给定头的值。
返回给定标头之后的下一个标头的名称。
这些方法中的每一个都只有一个参数,即HTTP标头的名称字符串。
还可以使用OutputHeaders()
方法,该方法将HTTP标头写入当前设备(尽管它们的生成顺序不同)。
%Net.HttpResponse
类提供了存储HTTP响应其他特定部分的属性:
StatusLine
存储HTTP状态行,这是响应的第一行。StatusCode
存储HTTP状态码。ReasonPhrase
存储与StatusCode
对应的人类可读的原因。ContentInfo
存储关于响应体的附加信息。ContentType
存储了Content-Type:
标头的值。HttpVersion
表示发送响应的web服务器所支持的HTTP版本。本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。