PHP cURL-POST是否发送到空白页?

时间:2018-06-27 15:07:08

标签: php curl

我正在尝试自动使用this site,用户可以在其中使用临时的电子邮件地址,这些地址也可以由他们手动指定。通过将<input name="csrf" type="hidden">输入到表单中并带有一组随机字符,它使用了非常简单的反垃圾邮件保护,然后需要将其包含在POST请求中。因此,如果CSRF为bj152nvua2ob,并且我希望新地址为“ john@l0real.net”,则我的POST必须为:

csrf=bj152nvua2ob&mail=john&domain=@l0real.net

问题是,我无法使用cURL和PHP做到这一点。这是我的代码的顶部:

$ch = curl_init ();

curl_setopt ($ch, CURLOPT_URL, "temp-mail.org/en/option/change/");
// Without CURLOPT_FOLLOWLOCATION, the page is not going to load.
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

$html = curl_exec ($ch);

然后,在得到响应后,我开始生成一个新的邮件地址并开始获取CSRF,因此,我编写了两个简单的函数,分别称为“ generate_mail”和"get_csrf"。我已经测试了它们两个,它们似乎可以正常工作。

$csrf = get_csrf ($html);
$mail = generate_mail ();
$post = "csrf=$csrf&mail=$mail&domain=@l0real.net";
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);

file_put_contents ("final_response.html", curl_exec ($ch));

curl_close ($ch);

在我的PC上创建文件final_response.html然后查看它之后,我注意到结果不是我所期望的。经过一些尝试,我决定使用Fiddler调试连接,然后发现一些有趣的事情。这是通过浏览器使用此网站时得到的:
with my browser

,并带有cURL:
with cURL

请注意,针对... 4共有1个元素(不包括隧道)!第一个元素为空响应,但第二个元素包含HTML页面。最后两个是相同的:第三个是空响应(那是我的POST发送的地方),第四个包含具有不同CSRF和不正确邮件地址的HTML页面(该页面是由网站本身生成的,而不是由我生成的)。据我所知,每次使用curl_exec时,它首先加载一个空白页面,然后加载正确的页面。我的所有请求都被发送到空请求,因此稍后将被忽略。这是安全措施,还是我没有正确配置cURL?我试图提供尽可能多的信息,展示了我的每个步骤,希望可以解决此问题。

1 个答案:

答案 0 :(得分:0)

通过添加以下代码行来解决:

curl_setopt ($ch, CURLOPT_POSTREDIR, 3);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $path_to_cookies);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $path_to_cookies);

现在,它可以按预期的方式运行!