C# 解析URL重定向

C# 解析URL重定向,c#,url,resolveurl,C#,Url,Resolveurl,我已经设置了一个URL重定向,这样我就可以将主机更改为应用程序下载的文件,而无需更改应用程序中的代码 问题是我需要在下载文件之前解析正确的URL。我尝试了在SO找到的一种方法,但没有成功(Webrequest) 所以我想他们不使用公共重定向 如何解析真正的url/ip 更新: 我在freedns上有另一个子域,如果你在这个子域上下载了一个字符串,你就会得到它应该重定向到的页面。也许这些信息对任何人都有帮助 更新2: 以下是我用来获取其他网页的代码: WebClient clien

我已经设置了一个URL重定向,这样我就可以将主机更改为应用程序下载的文件,而无需更改应用程序中的代码

问题是我需要在下载文件之前解析正确的URL。我尝试了在SO找到的一种方法,但没有成功(Webrequest)

所以我想他们不使用公共重定向

如何解析真正的url/ip

更新:

我在freedns上有另一个子域,如果你在这个子域上下载了一个字符串,你就会得到它应该重定向到的页面。也许这些信息对任何人都有帮助

更新2:

以下是我用来获取其他网页的代码:

        WebClient client = new WebClient();
        string xml = client.DownloadString(new Uri("myfreednshere"));
因此,通过运行该代码,我得到了网页b的字符串,“MyFreedShere”重定向到该字符串

这意味着webclient成功解析url重定向。我可以使用任何代码来解决重定向问题吗

更新3:

这是我在httprequest中得到的响应:

{X-Abuse: URL redirection provided by freedns.afraid.org - please report any misuse of this service
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Cache-Control: public, max-age=15
Content-Type: text/html
Date: Wed, 09 Nov 2011 21:55:21 GMT
Server: Apache/1.3.41 (Unix) PHP/5.3.6 with Suhosin-Patch
X-Powered-By: PHP/5.3.6

}

所以你想要301重定向

它可以通过两种方式处理。如果这是.NET,并且您使用的是IIS 7,则可以使用URL重写模块(),或者如果您知道正在执行的操作,则可以直接修改web.config文件

    <system.webServer>
  <httpRedirect enabled="true" destination="http://domain.com/products" httpResponseStatus="Permanent" />
</system.webServer>


有关如何处理301重定向的更多信息,请点击此链接

它可以通过两种方式处理。如果这是.NET,并且您使用的是IIS 7,则可以使用URL重写模块(),或者如果您知道正在执行的操作,则可以直接修改web.config文件

    <system.webServer>
  <httpRedirect enabled="true" destination="http://domain.com/products" httpResponseStatus="Permanent" />
</system.webServer>


有关如何处理301的更多信息,请点击此链接。WebClient类遵循重定向。尝试使用HttpWebRequest:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.AllowAutoRedirect = false;

发出请求后,其中一个HTTP头“Location”给出了重定向到的位置(但由于AllowAutoRedirect已关闭而没有跟随)

WebClient类跟随重定向。尝试使用HttpWebRequest:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.AllowAutoRedirect = false;

请求发出后,其中一个HTTP头“Location”给出了它被重定向到的位置(但由于AllowAutoRedirect已关闭而没有跟随)

我注意到至少有一个网站(http://fb.afraid.org,我唯一可以使用快速检查的域)不使用HTTP重定向,301重定向,或者代理。它使用框架。因此,您的原始代码应该可以工作:

    WebClient client = new WebClient();
    string xml = client.DownloadString(new Uri("myfreednshere"));
经过一点修改,我使用了以下代码:

    WebClient client = new WebClient();
    string html = client.DownloadString(new Uri("http://fb.afraid.org"));

调用的结果具有真实的url(http://www.fragbite.com)在三个位置,一个在注释中,一个在帧源中,一个在noframes标记的链接中。如果需要,您应该能够通过编程方式解析url。

我注意到至少有一个网站(http://fb.afraid.org,我唯一可以快速检查的域)不使用HTTP重定向、301重定向或代理。它使用框架。因此,您的原始代码应该可以工作:

    WebClient client = new WebClient();
    string xml = client.DownloadString(new Uri("myfreednshere"));
经过一点修改,我使用了以下代码:

    WebClient client = new WebClient();
    string html = client.DownloadString(new Uri("http://fb.afraid.org"));


调用的结果具有真实的url(http://www.fragbite.com)在三个位置,一个在注释中,一个在帧源中,一个在noframes标记的链接中。如果需要编程,您应该能够解析url。

如果您的代码适用于一个url而不是另一个url,我建议问题出在重定向中,而不是代码中。如果您在浏览器中访问该url,它是否会将您重定向到正确的位置?你能告诉我们你用来获取文档的代码吗?@JimMischel我现在更新了我的问题。根据toxicious对我答案的评论,这应该是Freedns上的问题?转到webapps?如果你的代码适用于一个url而不是另一个url,我建议问题出在重定向中,而不是代码中。如果您在浏览器中访问该url,它是否会将您重定向到正确的位置?你能告诉我们你用来获取文档的代码吗?@JimMischel我现在更新了我的问题。根据toxicious对我答案的评论,这应该是Freedns上的问题?移动到webapps?不,我无法控制重定向。url a重定向到url b。通过对url a进行操作,我想检索url b。不,我无法控制重定向。url a重定向到url b。通过对url a做一些操作,我想检索url b。它给出了我在回答中编写的代码。“由freedns.fear.org提供的URL重定向-请报告此服务的任何滥用情况”如果是这种情况,则您无法控制重定向。freedns正在获取数据,并为您获取数据。您无法在代码中控制它,代理正在为您执行此操作。如果您使用上述代码,您可以获取位置(),这是它将您重定向到的url。要获取位置,
response.GetResponseHeader(“位置”)
。也可以通过
ResponseHeaders[“Location”]
属性使用
WebClient
。@JimMischel它不起作用。标题为空。好吧,我想我必须用非完美的方式,然后硬编码url。无论如何,谢谢你试着帮助我@有毒,就像我在之前的内容中提到的。这就是检查重定向的方式。在这种情况下,您实际上没有被重定向,而是在使用代理。服务器正在为您完成工作,而不是告诉您可以去哪里。使用重定向。是一个代理。当您将web浏览器指向其中一个URL时,您可以从不同的URL获取内容,区别在于浏览器是获取内容(重定向)还是服务器获取内容(代理)。如果是重定向,您可以轻松获得新的URL;如果它是代理,你不能。它给出了我在回答中写的代码。“由freedns.fear.org提供的URL重定向-请报告此服务的任何滥用情况”如果是这种情况,则您无法控制重定向。freedns正在获取数据,并为您获取数据。您无法在代码中控制它,代理正在为您执行此操作