【问题标题】:How to verify that a webpage exist如何验证网页是否存在
【发布时间】:2012-03-29 12:02:58
【问题描述】:

我在这里发送 HTTP GET 请求并接收数据:

ssize_t numBytes = recvfrom(sock, request, 1000, 0,
                   (struct sockaddr *) &myaddr, &fromAddrLen);
    if(numBytes < 0)
        printf("The requested resource does not exist.\n");
    else
        printf("the webpage exist :)\n");

我想检查请求的页面是否存在。但即使页面不存在,通常也会从服务器发送状态消息(类似于“404 未找到”)。 它仍然是一些数据,因此我无法获得 numBytes

如何检查响应状态以验证页面是否存在?

【问题讨论】:

  • 我认为recvfrom() 用于UDP。 HTTP 使用 TCP。
  • recvfrom() 可以与 TCP 一起使用,尽管这不是常见的做法。

标签: c http sockets


【解决方案1】:

您必须阅读响应的第一行并提取状态代码。如果是 4xx 或 5xx 代码,则出现问题(404 = 未找到,403 = 拒绝访问)。

【讨论】:

  • 但此时您可能应该使用某种HTTP parser
  • 是标题中的状态码还是必须从页面正文中提取?有些人的 404 页面变得非常有创意......
  • @Gary 它位于响应的第一行,在标题之前。
  • 这就是我的想法。你能告诉我我应该如何编写代码吗?
  • 它总是在标题中。不过只看代码。第一行总是这样:HTTP/1.1 404 Not Found - 它也可能是 HTTP/1.0 并且代码后面的字符串可能不同。我看到一些法国网站在代码之后实际上有一个法国状态消息。糟糕!
【解决方案2】:

检查 numBytes libcurl 或libwww

【讨论】:

  • 我不会使用库。这是一个任务:)
  • 那么你必须编写自己的 HTTP 解析器,至少部分是这样,所以你应该阅读 RFC 2616 (ietf.org/rfc/rfc2616.txt),它定义了 HTTP 的工作原理。
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多