首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中使用WebClient有没有办法在重定向后获取站点的URL?

在C#中,使用WebClient可以通过设置AllowAutoRedirect属性为false来阻止自动重定向,并通过检查响应头中的Location属性来获取重定向后的URL。

以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Net;

class Program
{
    static void Main(string[] args)
    {
        WebClient client = new WebClient();
        client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        client.AllowAutoRedirect = false;

        try
        {
            WebResponse response = client.OpenRead("https://example.com");
            string location = response.Headers["Location"];
            Console.WriteLine("Redirected URL: " + location);
        }
        catch (WebException ex)
        {
            if (ex.Status == WebExceptionStatus.ProtocolError)
            {
                HttpWebResponse response = (HttpWebResponse)ex.Response;
                if (response.StatusCode == HttpStatusCode.Redirect || response.StatusCode == HttpStatusCode.MovedPermanently)
                {
                    string location = response.Headers["Location"];
                    Console.WriteLine("Redirected URL: " + location);
                }
                else
                {
                    Console.WriteLine("Error: " + response.StatusCode);
                }
            }
            else
            {
                Console.WriteLine("Error: " + ex.Message);
            }
        }
    }
}

在上面的示例代码中,我们创建了一个WebClient对象,并将AllowAutoRedirect属性设置为false,以阻止自动重定向。然后,我们尝试使用OpenRead方法打开一个URL,如果响应状态码为重定向或永久移动,则从响应头中获取Location属性的值,即为重定向后的URL。如果出现其他错误,则输出错误信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 利用Apache的. htaccess完美解决301重定向.htaccess文件实现301重定向常用的七种方法

    使用.Htaccess文件实现301重定向常用的七种方法 301重定向对广大站长来说并不陌生,从网站建设到目录优化,避免不了对网站目录进行更改,在这种情况下用户的收藏夹里面和搜索引擎里面可能保存的还是老的地址,在打开这些链接时会无法显示页面出现404的错误,造成很差的用户体验并失去了很多流量,今天笔者就给大家分享一下实现301重定向的七种方法。 从搜索引擎优化的角度来看,目前301重定向是网站目录更改后重新定向最为可行的一种办法。在你更改地址使用了301重定向后,搜索引擎只会对新地址进行索引,同时会把旧地址下原来收录的链接转移到新地址下,而上述的这些操作并不会影响到网站在搜索引擎的排名。 实现301重定向最直接的方法是编辑.htaccess文件,想了解关于htaccess文件使用方法,请点此查看。园子需要提醒你的是,在对.htaccess文件进行操作之前,一定要备份好原来的.htaccess文件,以避免修改出错带来不必要的麻烦。 1.重定向Domain.Com到Www.Domain.Com 这种重定向非常常见,最终目的是实现域名的唯一性,也是seo必须要做的。实现方法是在.htaccess文件中加入以下规则: 代码如下: 1 2 3 RewriteEngine On RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 注:使用这种301重定向方式后,当你打开类似domain.com的网址后会自动定向到www.domain.com。 2.重定向Www.Domain.Com到Domain.Com 这种操作刚好和上面的域名显示是相反的,规则如下: 代码如下: 1 2 3 RewriteEngine On RewriteCond %{HTTP_HOST} !^domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301] 注:使用此301重定向方式,当你打开类似www.domain.com的网址后会自动定向到domain.com。 3.重定向Olddomain.Com 到 Newdomain.Com 这种操作经常用于更换域名时用到,很多站长因为种种原因可能要为站点更换域名,此时多采用以下规则来实现重新定向: 代码如下: 1 2 3 4 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !olddomain.com$ [NC] RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R=301] 注:当用户打开老的域名后,会自动重定向到新的域名下的站点,此时域名显示格式为不带www.的格式。 4.重定向Olddomain.Com 到 Www.Newdomain.Com 这种操作是基于第三种方式的改良,只是显示网址显示为带www.的那种。 代码如下: 1 2 3 RewriteEngine On RewriteCond %{HTTP_HOST} !olddomain.com$ [NC] RewriteRule ^(.*)$ http://www.newdomain.com/$1 [L,R=301] 注:当用户打开老的域名后,会自动重定向到新的域名下的站点,并且网址显示格式为带www.的格式。 5.重定向Domain.Com/File/File.Php 到 Otherdomain.Com/Otherfile/Other.Php 这种操作针对于更改一个域名的同时,网站目录路径也发生变化的情况下使用,规则如下: 代码如下: 1 2 RewriteCond %{HTTP_HOST} ^www.domain.com$ RewriteRule ^file/file.php$ http://www.otherdomain.com/otherfile/other.php [R=301,L] 注:当用户访问老的域名路径时,会重新定向到新的域名新的路径下。 6.IIS服务器下实现301重定向 具体方法如下:打开internet信息服务管理器,在欲重定向的网页或目录上按右键,选中“重定向到URL”, 在对话框中输入目标页面的地址,切记要选中“资源的永久重定向”最后点击“应用”即可。 注:再次提醒你,一定要选中“资源的永久重定向”。 7.Apache服务器实现301重定向 在Apache服务器实现301重定向的方法园子在以前的文章中提到过,只需要在.htaccess文件中加入以下规则: 代码如下: 修改.htaccess文件

    02

    转发与重定向的区别

    重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,不再是同一个请求,(很多人说使用域对象传值用转发不用重定向是因为重定向不带参数我认为那种说法是有问题的)所以经过一次重定向后,request内的对象将无法使用。

    02

    301跳转与URL转发[通俗易懂]

    在购买域名时,域名本身是不带有www的,但由于域名要通过DNS服务器解析后才可以使用,在这个过程中每一个域名是会指向一个web服务器ip地址,由于在很早之前网站方都会增加一个”www”的子域名来帮助客户以更多的路径访问网站,客户通常都会按照:”www.++.com”的形式来访问站点;如果你没有做这个www的解析那么”www.++.com”就不能访问,对于不懂技术或者不明白解析的客户来讲,这个问题可能会造成他不能访问你的站,因为他只是知道用带有”www”的形式访问你的站点,可能不知道”++.com”也是同样可以访问的!所以,后来也就有了更多人在延续这个做法;我们在购买空间域名时,服务商也会随手就帮你做了这个”www”的解析,当然,这个解析的服务器地址是和没有”www”相同的,造成:你用带”www”的和不带两个域名同时可以访问一个同样的内容。说白了这个问题的答案就是:能够让初次使用互联网的人更快的访问进你的网站。

    03

    利用Github Pages实现“服务CNAME”功能

    当有域名自动跳转(CNAME)到某一个指定 WEB 服务网站(单域名)的需求时,一般是在域名注册商那里添加 CNAME 解析就可以了,但是如果目标站点与多个其他站点服务部署在同一台服务器上,且站点服务是以域名区分(根据不同域名区分不同服务,但公用同一个IP和端口)的情况时,由于 CNAME 解析主要的作用只是映射出 CNAME 的目标域名的 IP 地址,本身不会做域名路由跳转,这样的话就不能正常跳转到指定域名的网站页面了,常见做法是给原域名搭建一个WEB网站服务,然后再通过这个WEB服务专门去做重定向跳转,但是仅仅为了一个页面跳转的功能就再搭建一个web服务的话,就有点太浪费成本了,有没有比较简便的方式呢?实际上我们可以利用免费的Github Pages服务来实现这个需求。

    06

    C#中HttpWebRequest的用法详解

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构 造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。

    02
    领券