Php curl登录,两次传递会话cookie

Php curl登录,两次传递会话cookie,php,curl,Php,Curl,我尝试使用curl登录到一个SSL安全的网站,但不知何故,我没有正确地登录 第一个curl连接检索登录表单。一开始的SSL问题现在已经解决。用于身份验证的字段和所有隐藏字段将被标识并用于以下帖子。定义了cookie文件,并从中读取jar。cookie文件是可访问的,并且随着每次登录尝试而更新。curl已成功设置会话cookie。HTTPHEADER被移除,以阻止请求击中100连续墙。Curl被配置为跟进并发送一个referer。 但是,我仍然找不到脚本被卡住的地方。Curl和PHP都不会发出任何

我尝试使用curl登录到一个SSL安全的网站,但不知何故,我没有正确地登录

第一个curl连接检索登录表单。一开始的SSL问题现在已经解决。用于身份验证的字段和所有隐藏字段将被标识并用于以下帖子。定义了cookie文件,并从中读取jar。cookie文件是可访问的,并且随着每次登录尝试而更新。curl已成功设置会话cookie。HTTPHEADER被移除,以阻止请求击中100连续墙。Curl被配置为跟进并发送一个referer。 但是,我仍然找不到脚本被卡住的地方。Curl和PHP都不会发出任何错误消息或警告

以下是简短的脚本:

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE,       1);
curl_setopt($ch, CURLOPT_HEADER,        1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_AUTOREFERER,   1);
curl_setopt($ch, CURLOPT_HTTPHEADER,    array('Expect:')); // remove Expect header to avoid 100 Continue situations
curl_setopt($ch, CURLOPT_USERAGENT,     'Mozilla [abbreviated]');
curl_setopt($ch, CURLOPT_CAINFO,        dirname(__FILE__).'/cacert.pem');
curl_setopt($ch, CURLOPT_COOKIEFILE,    dirname(__FILE__).'/cookie.hq.txt'); // write cookies
curl_setopt($ch, CURLOPT_COOKIEJAR,     dirname(__FILE__).'/cookie.hq.txt'); // read cookies
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_URL,           'https://the_url.jsp');

$data = curl_exec($ch);
$error= curl_error($ch);
if(!empty($error))
    echo '<p>'.$error.'</p>';
else
    echo '<p>ok</p>';
但我得到的只是相同的表单和相同的会话cookie或新的cookie,具体取决于CURLOPT_CookiesSession设置

当我手动登录时,我注意到还有两个cookie集:LtpaToken和LtpaToken2,但我从未看到它们出现在脚本打印的请求头中。 即使没有Javascript aktivated,手动提交表单也可以工作。因此,在提交表单数据之前,不能在后台修改表单数据。 很明显,我在这里遗漏了一些东西。有什么想法可以让我看得更远吗


已解决:最终问题是由于帖子中的编码问题。 最初,POST数据是使用http_build_query()从数组中创建的。 现在,POST数据被简单地连接起来,并且键和值都被单独编码:

    $options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));
$options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));
请参阅下面的url:--

试试这个:-

请参见以下url:--

试试这个:-


已解决:最终问题是由于帖子中的编码问题。最初,POST数据是使用http_build_query()从数组中创建的。现在,POST数据被简单地连接起来,并且键和值都被单独编码:

    $options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));
$options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));

已解决:最终问题是由于帖子中的编码问题。最初,POST数据是使用http_build_query()从数组中创建的。现在,POST数据被简单地连接起来,并且键和值都被单独编码:

    $options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));
$options.=urlencode($fieldName).'='.urlencode($element->getAttribute('value'));

要确认JS没有修改,您应该使用firebug、内置开发人员控制台等工具在浏览器中检查POST请求。我已将请求更改为显示完整的$u请求数组的页面,并且没有与原始表单不同的内容。要确认JS没有修改,您应该使用firebug、内置开发人员控制台等工具在浏览器中检查POST请求。我已将请求更改为显示完整的$\u请求数组的页面,看起来与原始表单没有任何不同。