首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PowerShell中获取数字HTTP状态码

如何在PowerShell中获取数字HTTP状态码
EN

Stack Overflow用户
提问于 2009-09-24 18:26:39
回答 3查看 42.9K关注 0票数 26

我知道在PowerShell中有一个用来构建web客户端的few good ways:.NET类System.Net.WebClient和System.Net.HttpWebRequest,或者COM对象Msxml2.XMLHTTP。据我所知,唯一能让你访问数字状态码(例如200,404)的是最后一个COM对象。我的问题是我不喜欢它的工作方式,我不喜欢依赖COM对象。我还知道,由于安全漏洞等原因,微软不时会决定终止COM对象(ActiveX kill bits)。

我还遗漏了另一个.NET方法吗?状态码是不是在另外两个对象中的一个,我只是不知道如何获取它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-25 19:38:25

使用x0n和joshua ewer的答案并给出一个代码示例,我希望这不是太糟糕的形式:

代码语言:javascript
复制
$url = 'http://google.com'
$req = [system.Net.WebRequest]::Create($url)

try {
    $res = $req.GetResponse()
} 
catch [System.Net.WebException] {
    $res = $_.Exception.Response
}

$res.StatusCode
#OK

[int]$res.StatusCode
#200
票数 68
EN

Stack Overflow用户

发布于 2009-09-24 19:39:36

使用[system.net.httpstatuscode]枚举类型。

代码语言:javascript
复制
ps> [enum]::getnames([system.net.httpstatuscode])
Continue
SwitchingProtocols
OK
Created
Accepted
NonAuthoritativeInformation
NoContent
ResetContent
...

若要获取数字代码,请强制转换为int

代码语言:javascript
复制
ps> [int][system.net.httpstatuscode]::ok
200

希望这能帮上忙

-Oisin

票数 13
EN

Stack Overflow用户

发布于 2009-09-24 20:20:55

我意识到这个问题的标题是关于powershell的,但并不是真正的问题是什么?不管怎样..。

WebClient是HttpWebRequest的一个非常笨拙的包装器。如果您只是执行非常简单的服务消费或发布一些WebClient,那么XML会很棒,但代价是它并不像您希望的那样灵活。您将无法从WebClient获取您要查找的信息。

如果需要状态码,可以从HttpWebResponse获取。如果您正在使用WebClient执行类似的操作(只需将一个字符串发送到一个Url):

代码语言:javascript
复制
var bytes = 
    System.Text.Encoding.ASCII.GetBytes("my xml"); 

var response = 
    new WebClient().UploadData("http://webservice.com", "POST", bytes);

然后,您可以使用HttpWebRequest执行此操作以获取状态代码。同样的想法,只是有更多的选项(因此有更多的代码)。

代码语言:javascript
复制
//create a stream from whatever you want to post here
var bytes = 
  System.Text.Encoding.ASCII.GetBytes("my xml"); 
var request = 
  (HttpWebRequest)WebRequest.Create("http://webservice.com");

//set up your request options here (method, mime-type, length)

//write something to the request stream
var requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);        
requestStream.Close();

var response = (HttpWebResponse)request.GetResponse();

//returns back the HttpStatusCode enumeration
var httpStatusCode = response.StatusCode;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1473358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档