Php 需要先加载页面的登录表单

Php 需要先加载页面的登录表单,php,curl,http-post,Php,Curl,Http Post,我以php/curl的形式发布了这篇文章,但我对任何可行的解决方案都持开放态度 example.com/login.asp在登录表单中有一个隐藏值: input type=“hidden”name=“security”value=“123456789abcdef” 我尝试使用curl来获取这个额外的安全值,并将其包含到另一个curl调用中,但是在第一次curl之后该值发生了变化。我读过一篇相关文章,其中建议使用phpfile\u get\u contents,但它不适用于特定的网站 当前的php

我以php/curl的形式发布了这篇文章,但我对任何可行的解决方案都持开放态度

example.com/login.asp
在登录表单中有一个隐藏值:
input type=“hidden”name=“security”value=“123456789abcdef”

我尝试使用curl来获取这个额外的安全值,并将其包含到另一个curl调用中,但是在第一次curl之后该值发生了变化。我读过一篇相关文章,其中建议使用php
file\u get\u contents
,但它不适用于特定的网站

当前的php curl如下所示:

function curling ($websitehttps,$postfields,$cookie,$ref,$follow) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $websitehttps);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Connection: Close'));
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    if ($cookie != "") {
        curl_setopt($ch, CURLOPT_COOKIE,$cookie);
    }
    if ($postfields != "") {
        curl_setopt($ch, CURLOPT_POST, 1); 
        curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields);
    }
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow); 
    curl_setopt($ch, CURLOPT_AUTOREFERER,TRUE); 
    curl_setopt($ch, CURLOPT_REFERER, $ref);
    curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
我需要在post字段($postfields)中使用额外的安全代码,它应该类似于以下内容:
ref=https%3A%2F%2Fexample.com%2F&security=123456789abcdef


有办法做到这一点吗

在两个单独的curl会话中添加一些额外的行解决了这个问题

添加到第一个curl会话的行:

curl_setopt ($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
这些添加在tmp文件夹中创建了一个cookie文件

添加到第二个curl会话的行:

curl_setopt ($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
在这里,使用cookie文件中的信息在登录页面上获得相同的安全代码


在中描述的解决方案也可能起作用。在我的情况下,服务器设置不允许我使用它。

您是否确保将第一个请求中的cookie传递给第二个请求?我假设如果不是,这就是为什么安全值会改变。这就是问题所在。@i--谢谢你的准确提示,问题其实是关于饼干的。