如何在 php 中获取远程域的 HTTP 状态代码?

2023-11-25

我想创建一个批处理脚本,遍历数据库中的 20,000 个链接,并清除所有 404 等。如何获取远程 URL 的 HTTP 状态代码?

最好不要使用curl,因为我没有安装它。


CURL 会是完美的,但由于你没有它,你将不得不开始使用套接字。该技术是:

  1. 打开到服务器的套接字。
  2. 发送 HTTP HEAD 请求。
  3. 解析响应。

这是一个简单的例子:

<?php

$url = parse_url('http://www.example.com/index.html');

$host = $url['host'];
$port = $url['port'];
$path = $url['path'];
$query = $url['query'];
if(!$port)
    $port = 80;

$request = "HEAD $path?$query HTTP/1.1\r\n"
          ."Host: $host\r\n"
          ."Connection: close\r\n"
          ."\r\n";

$address = gethostbyname($host);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);

socket_write($socket, $request, strlen($request));

$response = split(' ', socket_read($socket, 1024));

print "<p>Response: ". $response[1] ."</p>\r\n";

socket_close($socket);

?>

更新:我添加了几行来解析 URL

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 php 中获取远程域的 HTTP 状态代码? 的相关文章

随机推荐

  • 如何在 JSON 响应 ASP.NET Core 中关闭或处理驼峰命名法?

    我正在学习有关 ASP NET Core Web API Angular 2 的 WintellectNOW 课程 我已经实现了 API 部分 但无论出于何种原因 返回的 JSON 的变量名称都是小写的 返回的 JSON 格式如下 id 1
  • 测试点是否在某个矩形内

    我有一大堆矩形 它们的大小都相同 我正在生成不应该落在这些矩形中的随机点 所以我想要做的是测试生成的点是否位于其中一个矩形中 如果是 则生成一个新点 使用 R 树似乎可行 但它们实际上适用于矩形而不是点 我可以使用 R 树算法的修改版本 该
  • 将所有源文件一次传递给编译器有什么好处吗?

    我读过 整个程序优化 wpo 和 链接时间代码生成 ltcg 我想知道如果我将所有源代码从 cli 一次性传递给编译器 如 g a cpp b cpp 是否会进行更多模块间分析 或者这只是启用这些标志之一 编译器之间对此有区别吗 例如 英特
  • 直接从Java执行JSP

    我需要执行一个JSP 但我需要直接从 Java 而不使用 Tomcat 或任何其他 servlet 容器 编译 JSP 也是一件好事 但不是必需的 我认为 org apache jasper 包可能很适合这样做 但我在网上找不到任何好的示例
  • 登录时在 Windows 7 中自动运行 bat 脚本

    我最近从已故的祖母那里购买了一台 Windows 7 笔记本电脑 我一直用它来做工作和其他事情 我决定使用 VirtualBox 创建一个虚拟机 现在我想在 Windows 7 主机 计算机上创建一个用户 以便当我登录到该用户时它会自动运行
  • Android:AutoCompleteTextView 在未输入文本时显示建议

    我在用AutoCompleteTextView 当用户单击它时 我想显示建议 即使它没有文本 但是setThreshold 0 工作原理与setThreshold 1 因此用户必须输入至少 1 个字符才能显示建议 This is 记录的行为
  • 检查实例是否属于某种类型

    用它来检查是否c是一个实例TForm c GetType Name CompareTo TForm 0 除了使用之外 是否还有更类型安全的方法来做到这一点string作为参数CompareTo 这里的不同答案有两种不同的含义 如果你想检查一
  • 尝试从 Django 中的 POST 解析 `request.body` [重复]

    这个问题在这里已经有答案了 由于某种原因 我无法弄清楚为什么 Django 不处理我的request body内容正确 正在发送中JSON格式 并查看Network开发工具中的选项卡将其显示为请求负载 creator creatorname
  • 如何在字符串中使用反斜杠 (\)?

    我尝试了很多方法来获得单反斜杠从一个executed 我的意思不是来自的输入html 我可以得到特殊字符作为制表符 新行和许多其他内容 然后将它们转义为 t or n or someother character 但当 a 时我无法得到一个
  • 如何判断 Chrome 扩展是由真实用户安装还是由我在开发过程中安装?

    我在 Chrome 扩展程序中使用 Analytics 我只想在真人 不是我正在使用它时 使用扩展时才执行分析代码 以下任何一项是否可行 哪一项是最好的 确定扩展是打包安装还是解包安装 我认为这是最好的 因为解压显然意味着它 正在开发中 并
  • 值限制:类型“bar”已被推断为具有泛型类型

    在下面的代码片段中 我不明白为什么我必须撰写f and g方式函数foo可以以及为什么它不能按功能方式工作bar尝试去做 let f a b a b let g a a b a a let gt f1 f2 fun a b gt let x
  • 在类型 ' 上找不到带有类型 'string' 参数的索引签名

    我正在开发我的第一个 firebase typescript 函数项目 我有以下代码片段 const files status src api status f js invite src api invite f js user src
  • 如何将java序列化对象写入和读取到文件中

    我将把多个对象写入一个文件 然后在代码的另一部分检索它们 我的代码没有错误 但无法正常工作 您能帮我找出我的代码有什么问题吗 我从不同的网站阅读了不同的代码 但没有一个对我有用 这是我将对象写入文件的代码 MyClassList 是一个数组
  • 按下按钮时播放声音 - android

    我有这个代码 package com tct soundTouch import android app Activity import android media MediaPlayer import android os Bundle
  • 在 openSUSE 上安装最新的 Python

    我使用 Zypper 包管理器在 openSUSE 系统 参见下面的版本 上安装了 Python 这为我提供了 Python 3 2 但某些包需要 Python 3 3 更新为zypper update python3保留在 Python
  • Loaddata 未正确处理时间戳和时区

    我正在使用 django 1 4 1 并启用了 mysql 和时区 我将数据转储到 yaml 修改了一些字段以创建一些测试数据 并尝试将其重新加载 但是 即使指定了 tz Django 仍不断抱怨天真的日期时间 具体来说 我的负载数据有 f
  • 按频率对 SQL 查询记录进行排序

    有什么方法可以根据某个值在列中出现的频率来对从 SQL 查询中选择的记录进行排序吗 例如 如果有 5 个列 value1 的记录 3 个列 value2 的记录 以及 2 个列 value3 的记录 有没有办法让结果先显示 value1 然
  • mysql 仅替换某些字段

    我有一个 mysql 表 CREATE TABLE gfs localidad varchar 20 fecha datetime pp float 8 4 NOT NULL default 0 0000 temp float 8 4 NO
  • 获取特定区域的节点列表?

    我正在开发一款横向游戏 我需要知道某个区域中有哪些节点来实现 视线 之类的功能 现在我正在尝试使用 enumerateBodyiesInRect 但它检测到的主体距离评估的矩形 20px 或更多 我无法弄清楚为什么它如此不精确 这就是我现在
  • 如何在 php 中获取远程域的 HTTP 状态代码?

    我想创建一个批处理脚本 遍历数据库中的 20 000 个链接 并清除所有 404 等 如何获取远程 URL 的 HTTP 状态代码 最好不要使用curl 因为我没有安装它 CURL 会是完美的 但由于你没有它 你将不得不开始使用套接字 该技