【问题标题】:C#.net System.Net.WebClient .. Server Side or not?C#.net System.Net.WebClient .. 服务器端与否?
【发布时间】:2011-02-10 15:54:17
【问题描述】:

我有一个 C#.net 网络表单,它以内容类型 JSON 格式执行简单的 response.write。它适用于我测试它的每个客户端 - 包括来自 Android 手机的 TinyWebDB API 调用。但不要担心这个问题的 API。

我在该 Web 表单中添加了一些服务器端代码来读取和抓取网页,如下所示。

System.Net.WebClient myWebClient = new System.Net.WebClient();
Stream myStream = myWebClient.OpenRead(what);
StreamReader sr = new StreamReader(myStream);
string s = sr.ReadToEnd();

我的印象是代码都是服务器端的!?

我从 IE、FF 和 Chrome 测试了该页面.. 一切都很好。但是,如果我尝试从 TinyWebDB 调用 Web 表单页面,调用效果很好,我可以取回数据,但是在服务器端读取网页时出现 404 错误??

就好像 System.Net.WebClient 需要客户端本身的某些东西或正在客户端本身做一些事情。我认为页面的阅读都发生在服务器端和我的服务器的幕后。为什么我的服务器端代码会关心哪个浏览器或 API 发起了对网络表单的调用?

我应该使用其他课程吗?

非常感谢。

【问题讨论】:

  • 它不可能在客户端“做某事”:代码在服务器上。你错了,问题出在别的地方
  • 需要更多信息。是否有某些东西(可能是查询字符串变量或 Web 方法)来确定是否调用了此代码?由于它在服务器端运行,因此如果服务器相同但客户端不同,则只有这样的实现细节可能会导致不同的行为。
  • 我也会这么认为。我隔离了所有内容并将上面的代码包装在 try/catch 中,将其结果返回给 API。从所有客户端中,我看到页面的输出读取了 tinyWebDB API 调用.. 得到的信息返回说远程服务器返回错误:(404)未找到。我还看到它尝试处理的内容与所有其他客户端匹配。
  • 这才是真正奇怪的地方。该解决方案在我调用某些页面时有效,但如果我尝试调用 yahoo 或 google 主页,我会得到 404 ???

标签: c# asp.net server-side scrape


【解决方案1】:

那是服务器端代码。

变量“what”在哪里设置?表单 TinyWebDB 客户端是否在修改表单输入值?

您请求的网站是否有可能拒绝您的请求,因为您点击它的速度太快了,而您每次都是那个客户却很不幸?

【讨论】:

  • 这也是我一直在想的唯一合理的事情。我在块的末尾添加了一个 Sleep 3000,但结果相同。它不是真正的表单,它只是在内容类型 JSON 中执行 Response.Write。该代码运行良好,只是当我从该 API 调用时,我在数据中返回了 404。
  • 我可以看到 API 花了整整 3 秒才回来,然后报告了 404 以及我的页面发送的其他固定数据,所以我可以清楚地看到上面的代码无法连接,但仅来自我的 API 调用。从浏览器测试的完全相同的页面返回了很好的结果。令人难以置信。
  • 这很奇怪,但通过我的 API TinyWebDB,我正在发送一个查询字符串,我尝试使用 webclient 进行抓取,如上所述。当我查看查询字符串文本时,它看起来不错,但是当我对其执行长度时 - 它报告的字符比我看到的多 10 个字符。有什么好的功能可以去掉所有非ascii字符吗?
  • 我怀疑问题是 http 调用的编码问题。我看到一些 7 或 8 个额外字符,但所有尝试识别和删除它们的尝试都失败了。 TinyWebDb HTTP 可能期待我实际上正在做的 JSON 响应,但在向上的过程中,它必须在查询字符串中向我的页面发送一些外部内容。不知道如何清理它。
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 2010-10-09
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多