【发布时间】: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 代码,我们无法了解/帮助更多信息,因为包含信息的请求标头不会为您指明解决方案。