【问题标题】:Where to find a changing PHP POST data在哪里可以找到更改的 PHP POST 数据
【发布时间】:2017-08-10 18:34:00
【问题描述】:

我使用以下代码登录(我用最重要的部分总结了它):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_parameters);
$result = curl_exec($ch);
curl_close($ch);

为了知道我必须输入哪些 $post_parameters,我在浏览器上手动登录时使用 httpfox 分析了 HTTP 流量。 POST 数据显示如下:

auth_key=880ea6a14ea49e853634fbdc5015a024&referer=http%3A%2F%2Fwww.website.net%2F&ips_username=myUsername&ips_password=myPassword

所以我只是在我的脚本上这样做了:

$post_parameters = "auth_key=".$authKey."&referer=".$referer."&ips_username=".$username."&ips_password=".$password;

我计划对模拟主题帖子的功能执行相同的操作,但我遇到的问题是,当我使用浏览器手动发布内容并分析流量以查找 POST 数据时,而不是看起来像登录,看起来是这样的:

-----------------------------20170174379164 // <-- Unknown number
Content-Disposition: form-data; name="st"

0
-----------------------------20170174379164
Content-Disposition: form-data; name="app"

forums
-----------------------------20170174379164
Content-Disposition: form-data; name="module"

post
-----------------------------20170174379164
Content-Disposition: form-data; name="section"

post
-----------------------------20170174379164
Content-Disposition: form-data; name="do"

new_post_do
-----------------------------20170174379164
Content-Disposition: form-data; name="s"

5124060eb013dfa845b1e6b67c3fbfa7 //Changing number which can be found on the previous source code
-----------------------------20170174379164
Content-Disposition: form-data; name="p"

0
-----------------------------20170174379164
Content-Disposition: form-data; name="t"
.
.
.

我想做和其他情况一样的事情,就像这样:

$post_parameters = "-----------------------------$boundaryNumber
Content-Disposition: form-data; name="st"

0
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="app"

forums
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="module"

post
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="section"

post
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="do"

new_post_do
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="s"

$changingNumber 
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="p"

0
-----------------------------$boundaryNumber
Content-Disposition: form-data; name="t"
.
.
."

但我有一个问题,我不知道边界线上会出现什么数字,所以我每次出现在代码上时都可以输入$boundaryNumber。有没有办法知道会出现什么数字? 如果没有,我可以输入我想要的数字还是必须是特定数字才能使 POST 工作?

我希望这次我能更好地解释自己。

【问题讨论】:

  • 发布您尝试访问的代码并更改该特定 POST 参数。我们不会为您这样做。
  • 带数字的行是边界线,通常是从发送请求的客户端以某种方式分配的。有关另一个基于命令行的 cURL 示例,请参阅:stackoverflow.com/a/10765244/1144627 我们需要查看您的 cURL 请求以进一步帮助您。 IIRC PHP cURL 自动为您分配边界。
  • 对不起,如果我没有正确地解释自己。我已经使用 cURL 登录了一个页面,现在我正尝试使用 CURLOPT_POST 在其上发布。我还没有编写 post 函数,因为我仍在尝试找出如何知道边界线上那个数字的值。为此,我手动(使用浏览器)在服务器上发布并检查该手动发布产生的 HTTP 流量以废弃它并寻找它,但我想它无法以这种方式找到。感谢@fyrye 的链接,但我使用的是 Windows,我认为您发送给我的问题是针对 Linux 的。
  • 问题是这样的。在 httpfox 上,我在手动发布主题时扫描了流量,并且 POST 文件有一个 POST 数据,看起来就像我在我的问题上发布的代码。如果我想用curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 在cURL 上重新创建那个POST,我需要在发送它之前知道边界线上的那个数字,这样我就可以像手动发布那样编辑$post_data var。当我在 cURL 上发送帖子时,我如何知道那里会出现什么数字? @fyrye
  • @Luiscri 我的链接只是一个带有自定义边界的一般 cURL 请求的演示。如果您要发送具有特定边界的请求。我相信您需要设置CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data; boundary=' . $boundary] 您的php_curl.dll 文件将控制您提供的每个帖子字段的边界位置,如果在您的cURL 请求中省略这些字段,则会自动生成这些边界。如果没有看到您的 PHP 代码,我们无法了解/帮助更多信息,因为包含信息的请求标头不会为您指明解决方案。

标签: php curl post


【解决方案1】:

2个明显的问题,你没有对你的数据进行urlencode,所以如果数据包含&amp;=或空格或ÆØÅ或一堆其他字符,你会发送错误的数据。

第二个问题是您的 curl 代码使用application/x-www-urlencoded 编码,但您的浏览器在 POST 请求正文中使用multipart/form-data-encoding。

现在有了 curl_,为了使用 multipart/form-data-encoding,只需给 CURLOPT_POSTFIELDS 一个数组,curl 就会为你 multipart/form-data-encode :)

$post_parameters = array (
        "auth_key" => $authKey,
        "referer" => $referer,
        "ips_username" => $username,
        "ips_password" => $password 
);

编辑:修复了一些破坏代码的拼写错误,将其从 urlencoded 转换为 php 数组时,数组键名中有 =

关于边界字符串的混淆,是你自己决定边界字符串是什么。通常,它只是一堆随机字符。它是multipart/form-data 编码的一部分...但您不必担心,因为 curl 会自动为您创建一个边界字符串,您无需知道它是如何工作的或它是什么, curl会帮你搞定的。

【讨论】:

  • 谢谢,我有一个概念问题,但知道你澄清了一切。再次感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2015-06-21
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多