在哪里可以找到不断变化的 PHP POST 数据



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

$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 流量。开机自检数据显示如下:

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 工作?

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

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

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

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

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

编辑:修复了一些密码破译错别字,从 urlencoding 转换为 PHP 数组时数组键名称中=

至于关于边界字符串的困惑,是你自己决定边界字符串是什么。 通常,它只是一堆随机字符。 它是multipart/form-data编码的一部分...但是您不必担心这一点,因为 curl 会自动为您制作一个边界字符串,并且您不需要知道它是如何工作的或它是什么,curl 会为您处理它。

最新更新