2012-03-30 74 views
0

我正在使用curl自动登录到会员区,但成功但登录后我想在会员区内张贴表单,但我不知道该怎么做,你能帮助我,请我当前的代码如下...curl登录并在会员区域内再次发帖

$main_url = 'https://www.url.com'; 

$redirect = '/reports/marks-checker'; 
$email = '[email protected]'; 
$password = 'pass123'; 


$url= $main_url.'/account/login'; 
$cookie="cookie.txt"; 

$postdata = 'redirect='.$redirect.'&EmailAddress='.$email.'&Password='.$password.'&RememberMe=1'; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, true); 
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, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
echo $result; 

curl_close($ch); 

上面的代码打印(回声)成员面积和形状(如下),我想查询...

<form method="POST"> 
<input type="radio" name="IDS" value="F" checked/> 
<input type="radio" name="IDS" value="H"/> 
<textarea name="q" cols="80" rows="15" wrap="none" style="width:99%"></textarea> 
<select name="SortBy"> 
    <option value="0">rank</option> 
    <option value="1">date</option> 
</select> 
<input type="submit" name="getmarks" value="Check marks"/> 
</form> 

我想发布数据到这个表单并获得结果,所以我可以使用正则表达式来获取数据。谢谢。

回答

1

您需要为使用DOM函数或正则表达式或形式(无论您的情况适用)的先验知识来创建要为它们分配形式的数组变量和值:

$form_vars = array(); 

具有名称/值对IDS/F或H,q /一些文本,SortBy/0或1

$form_vars[$var_name] = $value; 

例如

$form_vars['IDS'] = "H"; 

然后使用http_build_query功能来构建查询:

$encoded_form_vars = http_build_query($form_vars); 

然后尝试这样的事:

function postForm($url, $fields, $referer='') { 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:")); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_POST, 1); 
      curl_setopt($ch, CURLOPT_REFERER, $referer); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
      return curl_exec($ch); 
    } 

称为像这样的东西:

$result = postForm($url, $encoded_form_vars);