为什么维基百科用某个URL返回301响应代码?

时间:2015-10-17 19:21:12

标签: c# wikipedia dotnet-httpclient

一些具有特殊性质的请求,带有法语口音。

var client = new HttpClient();
var data0 = await client.GetAsync("http://fr.wikipedia.org/wiki/Monastère_d'Arkadi");

这个简单的代码产生:

  

StatusCode:301,ReasonPhrase:'永久移动',版本:1.1

任何想法发生了什么?下载法国的纽约文章实际上是有效的。我甚至尝试对名称进行编码,但没有任何作用。

1 个答案:

答案 0 :(得分:1)

维基百科发送一个HTTP 301,表明

的永久之家
  

http://fr.wikipedia.org/wiki/Monastère_d“阿卡迪

现在是

  

https://fr.wikipedia.org/wiki/Monast%C3%A8re_d“阿卡迪

如果您查看响应标头,您会看到Location标头有更新的URL。

Response headers

成功在浏览器中下载页面,因为浏览器会自动使用新位置。

<强>更新

如果我在IE中输入https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi(301响应的Location标头中的值),我会得到一个HTTP 200.但是,我也使用HttpClient获得HTTP 301。

如果我使用WebClient,我会收到错误“尝试了太多重定向”。看起来这里发生了某种重定向循环。我正在进一步探索这个问题。

更新2

我下载了using wget页面,详细记录了详细信息。请注意,wget无法验证Wikipedia的SSL证书,并且有两个重定向:从http URL到https URL,然后再到带有转义字符的URL。

E:\Software\GnuWin32\bin>wget -v --no-check-certificate http://fr.wikipedia.org/wiki/Monastère_d'Arkadi
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = E:\Software\GnuWin32/etc/wgetrc
--2015-10-17 23:22:43--  http://fr.wikipedia.org/wiki/Monast%E8re_d'Arkadi
Resolving fr.wikipedia.org... 208.80.154.224
Connecting to fr.wikipedia.org|208.80.154.224|:80... connected.
HTTP request sent, awaiting response... 301 TLS Redirect
Location: https://fr.wikipedia.org/wiki/Monast%E8re_d'Arkadi [following]
--2015-10-17 23:22:44--  https://fr.wikipedia.org/wiki/Monast%E8re_d'Arkadi
Connecting to fr.wikipedia.org|208.80.154.224|:443... connected.
WARNING: cannot verify fr.wikipedia.org's certificate, issued by `/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Va
lidation CA - SHA256 - G2':
  Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi [following]
--2015-10-17 23:22:44--  https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi
Connecting to fr.wikipedia.org|208.80.154.224|:443... connected.
WARNING: cannot verify fr.wikipedia.org's certificate, issued by `/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Va
lidation CA - SHA256 - G2':
  Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `MonastA"re_d'Arkadi'

    [  <=>                                                                          ] 171,252      463K/s   in 0.4s

2015-10-17 23:22:45 (463 KB/s) - `MonastA"re_d'Arkadi' saved [171252]