php通过cURL爬取数据(3):CURLINFO_HTTP_CODE返回0的排查和解决方案

这篇具有很好参考价值的文章主要介绍了php通过cURL爬取数据(3):CURLINFO_HTTP_CODE返回0的排查和解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、curl本地服务器需要DNS解析域名

在使用 curl 命令发送请求到域名地址,本地服务器需要进行 DNS 解析以获取域名对应的 IP 地址,否则,curl 命令将无法建立与目标服务器的连接。当使用 curl 命令发送请求时,curl 会尝试自动解析所提供的 URL 以获取 IP 地址。如果 DNS 解析成功,curl 将使用获取到的 IP 地址建立连接。如果 DNS 解析失败,curl 将无法连接到目标服务器。

因此,为确保 curl 命令在本地服务器上正常工作,请确保您的服务器可以进行 DNS 解析。可以在终端上使用以下命令来检查您的服务器是否可以进行 DNS 解析:

ping example.com

其中,“example.com” 是您需要测试的域名。如果命令能够成功进行 DNS 解析,则您的本地服务器可以成功解析域名。

二、如何排查错误原因

使用curl_error($curlHandle)排查错误原因

$host = "http://example.com/";
$curlHandle = curl_init($host);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_exec($curlHandle);
if (curl_errno($curlHandle)) {
    echo 'Error: ' . curl_error($curlHandle);
}
curl_close($curlHandle);

错误提示:

Could not resolve: example.com (Could not contact DNS servers)

“Could not resolve: example.comn (Timeout while contacting DNS servers)”错误提示表示无法解析服务器的 DNS,可能是服务器 DNS 配置错误或网络连接问题所致。您可以通过以下方法来进行排查和解决:

  1. 检查 DNS 设置:登录到您的服务器,查看 DNS 设置是否正确。可以使用以下命令来检查 DNS 服务商提供的 DNS 服务器地址是否正确:
  cat /etc/resolv.conf

如果 DNS 设置正确,您可以尝试更新 DNS 缓存并重新启动服务来解决问题:

sudo systemctl restart network
sudo systemctl restart named
  1. 检查网络连接:检查服务器的网络连接是否正常。可以使用以下命令来测试连接是否正常:

    ping www.lockdata.cn
    

    如果存在网络连接问题,可能需要联系网络管理员解决。

  2. 检查防火墙和代理:检查服务器上的防火墙和代理设置,确保 DNS 请求未被防火墙或代理拦截。可以尝试暂时关闭防火墙或代理,来确认是否影响 DNS 查询。

  3. 使用其他 DNS 服务器:如果您无法证实自己的 DNS 服务商的可用性,可以尝试使用其他 DNS 服务商提供的 DNS 服务器地址。

三、无法解析 DNS的程序升级方案

在 PHP 服务器上使用 curl 发送请求时,如果由于某些原因无法解析 DNS,可以使用以下方法来避免堵塞:

  1. 设置 CURLOPT_TIMEOUT:使用 CURLOPT_TIMEOUT 来设置超时时间,如果 curl 请求超时,将自动中止连接。使用以下代码设置 CURLOPT_TIMEOUT:

    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    

    在这个例子中,超时时间被设置为 10 秒。可以将这个值调整为更适合您的需求的值。

  2. 设置 CURLOPT_CONNECTTIMEOUT:使用 CURLOPT_CONNECTTIMEOUT 来设置连接超时时间,如果 curl 连接超时,将自动中止连接。使用以下代码设置 CURLOPT_CONNECTTIMEOUT:

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    

    在这个例子中,连接超时时间被设置为 5 秒。同样,可以将这个值调整为更适合您的需求的值。

  3. 设定 DNS 解析:如果 DNS 解析过慢或失败导致的 curl 堵塞问题仍然存在,可以尝试手动设定 DNS 解析。可以使用以下代码来设置 DNS 解析:

    curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 3600);
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    

    在这个例子中,DNS 解析缓存被设置为 3600 秒。此外,CURL_IPRESOLVE_V4 被用来指定仅使用 IPv4 地址。

四、宝塔配置DNS的操作方法

1.etc/resolv.conf

php通过cURL爬取数据(3):CURLINFO_HTTP_CODE返回0的排查和解决方案

2.通过GUI界面

php通过cURL爬取数据(3):CURLINFO_HTTP_CODE返回0的排查和解决方案
上面的配置方式是一样的效果。


@漏刻有时文章来源地址https://www.toymoban.com/news/detail-484321.html

到了这里,关于php通过cURL爬取数据(3):CURLINFO_HTTP_CODE返回0的排查和解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WEB通讯技术。前端实现SSE长连接,nodejs+express搭建简单服务器,进行接口调试,通过curl请求数据

    长连接(Keep-Alive)是一种HTTP/1.1的持久连接技术,它允许客户端和服务器在一次TCP连接上进行多个HTTP请求和响应,而不必为每个请求/响应建立和断开一个新的连接。长连接有助于减少服务器的负载和提高性能。 长连接的HTTP请求方法与普通HTTP请求方法相同,可以使用GET、P

    2024年02月09日
    浏览(52)
  • PHP curl Bad Request

    通过浏览器或postman访问服务器url,正常返回 通过curl访问url,返回Bad Request 上网搜索,可能出现的原因:url中包含空格、参数未使用urlencode转化 经过尝试,还是不生效。 再次排查,发现没有设置header时,返回正常。 之前表头: 进一步尝试,改为: 去掉换行,运行正常。 原

    2024年02月09日
    浏览(53)
  • php curl apache 超时 500错误

    web请求超过40s 就返回500错误 php的超时时间 set_time_limit无效 curl CURLOPT_TIMEOUT 设置请求时间 无效 设置apache Timeout 链接超时 无效 最后添加 Fcgid才可以 apache 配置文件 httpd.conf

    2024年02月11日
    浏览(64)
  • php7.3安装curl、openssl扩展

    cd /root wget https://www.openssl.org/source/openssl-3.0.8.tar.gz tar xvzf openssl-3.0.8.tar.gz cd openssl-3.0.8 ./config  make make install 解决 OpenSSL 1.1.i and \\\"Can\\\'t locate FindBin.pm in @INC\\\"  dnf install perl openssl version -a   查看openssl版本 cd /root wget https://curl.se/download/curl-8.0.1.tar.gz tar -xvf curl-8.0.1.tar.gz cd curl-8.0.1

    2024年02月03日
    浏览(61)
  • PHP&MySQL基础(一):创建数据库并通过PHP进行连接

    PHP同样可以对数据库进行连接,并且实现增删改查、登录注册等功能,这一篇写一下怎么使用PHP去连接MySQL数据库 目录 一、创建数据库 1.1 登录页面 1.2 创建数据库 1.3 创建数据库表 1.4 添加表字段 1.5 插入数据 1.6 导出和导入 二、PHP连接数据库 2.1 通过 mysqli() 进行实例化 2.

    2024年02月03日
    浏览(59)
  • 用PHP封装一个强大且通用的cURL方法

    用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。

    2024年02月14日
    浏览(67)
  • openAI 通过php方式 发送请求,流数据形式传输,php 实现chatGPT功能

    此处使用的框架是 symfony ,可自行根据自己框架开发,大同小异,框架无所谓,主要是功能! 先上代码 :

    2024年01月19日
    浏览(54)
  • PHP 使用cURL 相关函数来设置代理、处理 SSL 证书

    设置代理: 如果你需要通过代理服务器访问目标网址,你可以使用以下 cURL 相关函数来设置代理: curl_setopt($ch, CURLOPT_PROXY, \\\'proxy.example.com:8080\\\'); :设置代理服务器的地址和端口。 curl_setopt($ch, CURLOPT_PROXYUSERPWD, \\\'username:password\\\'); :如果代理服务器需要身份验证,使用此函数设置

    2024年02月16日
    浏览(65)
  • 抓包习讯云院校数据通过PHP解析导入数据库

    最近,打卡APP需要这个数据,通过抓包后发现这个数据是固定的,获取很简单,但是数据太多,手动导入不显示,于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题》 《一篇就够:uniapp-Mqtt系列问题详

    2024年02月08日
    浏览(50)
  • 使用curl执行Http请求

    curl(CommandLine Uniform Resource Locator或CommandLine URL),curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。是一个利用URL语法在命令行下工作的文件传输工具。curl设计为:在无用户交互下完成工作。 curl支持的协议包括:DICT、FILE、FTP、FTPS、GOPHER、H

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包