2010-06-10 92 views
1

我得到一个 “DOS”,而不是HTML字符串....Web请求返回 “DOS”

let getHtmlBasic (uri :System.Uri) = 
    use client = new WebClient() 
    client.DownloadString(uri) 


let uri = System.Uri("http://www.b-a-r-f.com/") 
getHtmlBasic uri 

这给出了一个字符串, “DOS”

大声笑什么?

所有其他网站似乎工作...

+2

这两个任意一个,barf.com是你的网站,你推广它,或者试图从我们这里偷东西或barf.com识别您的要求有关DDOS攻击,假冒用户和投诉 – eugeneK 2010-06-10 10:58:04

+1

好笨促进为程序员提供英语论坛的法语网站。 – 2010-06-10 11:00:18

+0

有没有其他信息可以给我们? WebClient对象是否返回HTTP响应头,例如'200','404','500' – 2010-06-10 11:02:49

回答

1
let req = (WebRequest.Create(uri)) :?> HttpWebRequest 
// 'use' is equivalent to ‘using’ in C# for an IDisposable 
req.UserAgent<-"Mozilla" 
0

它是基于用户代理。如果您使用浏览器用户代理,请求将起作用。这就是说,这似乎是一个非常明确的Keep Out消息。

+0

对不起,你告诉他。 – 2010-06-10 11:01:15

+0

@开发者艺术:为什么他很难过,他试图帮助开发者? – 2010-06-10 11:04:07

+0

@Ian,尤其是考虑到他刚才说jlezard正在试图发送垃圾邮件(这意味着它是他的网站)。 – 2010-06-10 11:05:26

1

他们可能会检测到自动爬网并向您发送该响应。

+3

-1似乎苦涩 - 复制我精确删除的答案。 – 2010-06-10 11:09:07

+0

这是正确的答案;有人不得不把它放在那里。但现在其他人已经给出了相同的答案,我想他们可以获得信贷,而不是你 - 而不是我。 – 2010-06-10 11:51:09

1

我一直在测试自己(不是在F但它并不重要),我可以确认该站点读取用户代理字符串,并根据其值返回站点内容或“DOS”文本。

奇怪的是,它们提供了一个feed服务(RSS和Atom),并且它们也会过滤出对它的请求。

虽然用户代理信息可以很容易伪造,但我的建议是,你试图获得他们的权限来抓取内容;至少来自XML feed!

+0

我打算用我的小“爬虫”来阅读几千页,你觉得我会遇到很多像这样的网站吗? 谢谢 – jlezard 2010-06-10 11:22:15

+3

确保你知道你在做第三方网站或耗尽他们的带宽之前正在做什么。编写智能爬虫很困难。阅读所有使用条款是不可能的。 – 2010-06-10 12:25:52

+0

我会放一点计时器,不要打倒第三方。它肯定比我想做一个智能爬虫要困难得多。但是在F#中异步计算尤其有趣。 感谢您的警告:) – jlezard 2010-06-10 14:37:45