【问题标题】:curl to follow location along with POSTcurl 跟随位置以及 POST
【发布时间】:2012-01-09 19:01:40
【问题描述】:

我在这里使用 cURL 将带有 POST 数据的请求发布到 PHP 脚本:http://localhost/example/index.php

如何隐藏 index.php 并只发帖到 http://localhost/example

我试过只是在那里发帖,但我得到一个 301 Moved Permanently 标头,如果我将 CURLOPT_FOLLOWLOCATION 设置为 TRUE,请求会随之而来,但似乎丢失了 POST 数据 - 使用这个 file_get_contents 在远端我什么也没得到('php://input')。

【问题讨论】:

  • 为什么这是必要的?
  • 如果你放一个斜杠会发生什么,即:localhost/example/ 在我看来,你可能会从 mod_dir 得到一个斜杠重定向。 httpd.apache.org/docs/2.1/mod/mod_dir.html
  • "example" 将被第三方调用,我不希望他们看到我使用的是哪种语言,这是什么文件等。
  • mqsoh - 是的!工作。这么简单的事故。如果您将此作为答案发布,我会接受。此外,有没有办法同时接受 - 带有斜杠和不带斜杠?我不希望第三方重蹈我的覆辙。

标签: php post curl


【解决方案1】:

POST 数据在重定向时丢失,这是无法避免的。

您可以做的是在 .htaccess 中指定(假设您运行 Apache)

DirectoryIndex index.php

然后通过请求http://localhost/example/,您将在该目录中收到 index.php。

如果您还想为发送到http://localhost/example 的请求(不带斜杠)提供 index.php,则会出现问题,因为默认情况下 apache 会重定向到带有斜杠的 url,从而丢失正在处理的 POST 数据。为了处理它,你可以伪造请求目录:

RewriteRule fakedirthatuserknows/?$ /realscriptdir/index.php [L]

/? 指出 Apache 在两种情况下都使用该规则:带有和不带有斜杠。为避免重定向,您需要跳过 R=301 标志,使其变为 [L]。使用重定向它将是[R=301,L]

【讨论】:

  • 感谢您的详细解释。虽然我仍然无法编写一个 htaccess 规则来接受或重写两个 URL(带和不带斜杠)到 index.php。问题是所有解决方案都是通过 301 重定向完成的,这会迫使 curl 丢失 POST 数据。当我达到这一点时,我将使用 DirectoryIndex 更改脚本的默认名称以进行更多掩饰。
  • 更新了示例规则。
  • 我仍然得到一个移动的永久标题。我还能做错什么?
  • 调试.htaccess,因为它显然不起作用。确保规则放在上面的目录localhost/ 而不是example/ 中,确保.htaccess 写入正确。
  • 经过一番思考,也许apache默认添加了斜杠?然后解决方案是伪造一个请求目录。 RewriteRule fakedirthatuserknows/?$ /realscriptdir/index.php [L]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2011-01-31
  • 2014-06-23
  • 2012-05-04
相关资源
最近更新 更多