Php cURL登录:Base-64字符数组的长度无效
我已经找到我的问题了。 类似于这个问题的问题太多了,但我无法得出任何结论 我已经编写了以下代码Php cURL登录:Base-64字符数组的长度无效,php,curl,asp-classic,Php,Curl,Asp Classic,我已经找到我的问题了。 类似于这个问题的问题太多了,但我无法得出任何结论 我已经编写了以下代码 <?php $aPosts = array("__VIEWSTATE" => "/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdm
<?php
$aPosts = array("__VIEWSTATE" => "/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdmHINmH2KdkZMdboHK0C5vwU/0H8jDKN8JIUGAWK7y6psPERPkF/dYP",
"__EVENTVALIDATION" => "/wEWBwLVs6iwDQKl1bK4CQK1qbSRCwLHlbuRCALGla+RCAKC3IeGDAKqs9XKA+XnuPlm+7BeBMKdG9tnXAq2MVVFKjVmbCbQG4g9jB9u",
"txtUsername" => "",
"txtPassword" => "d41d8cd98f00b204e9800998ecf8427e",
"dplLanguage" => "en",
"btnPublicLogin" => "login",
);
$posts = "";
foreach($aPosts as $key => $value){
$posts .= $key . "=" . $value . "&";
}
$url="http://www.example.com/login.aspx";
$cookie="cookiew.txt";
$rnd = rand(2547896321456987, 9999999999999999);
//$postdata = 'dplLanguage=fa&txtUsername=&txtPassword=d41d8cd98f00b204e9800998ecf8427e&__VIEWSTATE=/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdmHINmH2KdkZMdboHK0C5vwU/0H8jDKN8JIUGAWK7y6psPERPkF/dYP&__EVENTVALIDATION=/wEWBwLVs6iwDQKl1bK4CQK1qbSRCwLHlbuRCALGla+RCAKC3IeGDAKqs9XKA+XnuPlm+7BeBMKdG9tnXAq2MVVFKjVmbCbQG4g9jB9u';
$postdata = $posts;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
$rnd = rand(2547896321456987, 9999999999999999);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$a = curl_exec ($ch);
$url= 'http://www.example.com/search.aspx';
curl_setopt ($ch, CURLOPT_URL, $url);
$a = curl_exec ($ch);
curl_close($ch);
?>
如果我没有发送变量_VIEWSTATE和_EVENTVALIDATION,页面将返回登录屏幕。
但是当我使用这个变量时,我看到了这个错误:
Base-64字符数组的长度无效。请尝试:
foreach($aPosts as $key => $value){
$posts .= $key . "=" . urlencode($value) . "&";
}
$posts = trim($posts, "=");
希望此功能有助于取代您的foreach:
http_build_query($aPosts);
正如错误消息所说,base64数据无效。您应该指定原始数据并通过
base64\u encode()
传递,而不是指定静态字符串。你把它的末端修剪掉了吗?