【问题标题】:How to return specific info when a user uses CURL?用户使用 CURL 时如何返回特定信息?
【发布时间】:2024-01-29 23:15:01
【问题描述】:

我试图弄清楚当用户在我的一个网页上使用 cURL 时如何返回特定信息(即我不希望 curl 下载所有代码)。我在 ifconfig.me 上看到了一个工作示例,当您 curl ifconfig.me 时,它​​只返回您的 IP 地址。这是通过 Apache 完成并重定向 cURL 用户代理还是通过 PHP/HTML 以某种方式完成?

已解决: 感谢@Dancrumb 为我指明了正确的方向。我能够使用 Apache mod_rewrite 将 curl 用户代理重定向到自定义页面,其中包含我希望 curl 提取的特定信息。

RewriteEngine  on
RewriteCond %{HTTP_USER_AGENT}  ^curl/*
RewriteRule ^/index\.php$ /ip.php [L]

【问题讨论】:

  • 你的 cURL 输出到底是什么?
  • 您为什么不希望 cURL 下载您的代码?你对使用 LWP::UserAgent 的人满意吗? wget怎么样?桌面浏览器呢?
  • 当你将 curl 指向你的服务器时会发生什么?

标签: apache curl


【解决方案1】:

ifconfig.me 最有可能使用标头中的用户代理字符串来确定这不是浏览器请求。

如果你执行:

curl ifconfig.me/ua

你得到

curl/7.27.0

(或其他版本字符串)。

所以,如果你检查 HTTP 请求中的 User-Agent 标头,你可以看到该请求是 Curl 请求、浏览器请求还是其他一些 UA。

【讨论】:

  • 值得注意的是 curl 可以发送一个用户代理(CURLOPT_USERAGENT),所以虽然这是问题所要求的,但它可以被规避。
  • 我感觉他们正在做类似的事情。所以我需要使用 Apache 来检测/重定向 curl 用户代理到只包含我想要返回的特定数据的自定义页面?
  • @piddl0r 是的...依赖 UA 字符串并非万无一失,但这是自定义内容的好方法
  • @jacobt777 你可以使用 Apache 重定向,或者在你的 PHP 中进行过滤
  • @piddl0r 好点,但是对于我想要完成的事情,人们会选择将用户代理保持为 curl 而不是修改。感谢您的意见。
最近更新 更多