首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpClient 302重定向

HttpClient 302重定向
EN

Stack Overflow用户
提问于 2017-04-23 15:55:34
回答 1查看 3.1K关注 0票数 2

我有两个urls:https://pcr.apple.com/id868222886https://jigsaw.w3.org/HTTP/300/302.html。两者都有位置链接和302响应代码。

代码语言:javascript
复制
using System;
using System.IO;
using System.Net.Http;

namespace XaveScor.PodcastFeed
{
    public class RemoteFeedSource: FeedSource
    {
        private string url;
        protected virtual HttpMessageHandler Handler => new HttpClientHandler() { AllowAutoRedirect = true };

        public override Stream Stream => client.Value.GetStreamAsync(url).Result;

        private readonly Lazy<HttpClient> client;

        public RemoteFeedSource(string url)
        {
            client = new Lazy<HttpClient>(() => new HttpClient(Handler), false);    
            this.url = url;
        }
    }
}


[TestMethod]
public void Test1() //fail
{
    var source = new RemoteFeedSource("https://pcr.apple.com/id868222886");
    Assert.AreNotEqual(source.Stream.GetString(), "");
}

[TestMethod]
public void Test2() //success
{
    var source = new RemoteFeedSource("https://jigsaw.w3.org/HTTP/300/302.html");
    Assert.AreNotEqual(source.Stream.GetString(), "");
}

为什么?有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-23 21:33:13

如果您查看响应中的标题,您将看到以下内容:

第一个(https://pcr.apple.com/id868222886):

代码语言:javascript
复制
Content-Length: 0
Location: http://beardycast.libsyn.com/rss

第二个(https://jigsaw.w3.org/HTTP/300/302.html):

代码语言:javascript
复制
Content-Length: 389
Content-Type:   text/html;charset=ISO-8859-1
Location:       https://jigsaw.w3.org/HTTP/300/Overview.html

因此,第一台服务器悄悄地重定向您,而第二台服务器为您提供了一些额外的标题:

代码语言:javascript
复制
Strict-Transport-Security: max-age=15552015; includeSubDomains; preload
Public-Key-Pins: pin-sha256="cN0QSpPIkuwpT6iP2YjEo1bEwGpH/yiUn6yhdy+HNto="; pin-sha256="WGJkyYjx1QMdMe0UqlyOKXtydPDVrk7sl2fV+nNm1r4="; pin-sha256="LrKdTxZLRTvyHM4/atX2nquX9BeHRZMCxg3cf4rhc2I="; max-age=864000
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block

和反应机构:

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
               "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>Moved</title>
</head>
<body>
<P>This resources has moved, click on the link if your browser doesn't support automatic redirection<BR>
<A HREF="http://jigsaw.w3.org/HTTP/300/Overview.html">http://jigsaw.w3.org/HTTP/300/Overview.html</A></body>
</html>

这就是为什么HttpClient返回非空结果字符串的原因--它实际上不是空的。单元测试有错误的设计方法,因为它们不检查状态,而是只检查响应长度,即使对于3** http状态代码,响应长度也可能是非空的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43573321

复制
相关文章

相似问题

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