2011-11-16 85 views
0

我想用cURL远程登录到以下站点,但遇到了麻烦。 http://www.cbssports.com/login需要帮助使用cURL以PHP登录远程站点

有谁知道我做错了吗?谢谢。

<? 

$url = 'http://www.cbssports.com/login'; 
$fields = array(
      'login_form::userid'=>urlencode('USERNAME'), 
      'login_form::password'=>urlencode('PASSWORD') 
     ); 

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
$fields_string = rtrim($fields_string,'&'); 

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 
curl_setopt ($ch,CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 

curl_close($ch); 

?> 
+0

可能是cookies/session问题。您是否配置了cURL来持续调用该网站? –

+0

[cUrl登录然后cUrl下载](http://stackoverflow.com/questions/6987876/curl-login-then-curl-download) – mario

+0

可能的重复我将如何去配置cURL来持续调用该网站? – kcristella

回答

0

的距离有很多隐藏字段,还有一个或所有这些都需要一个良好的变化(见以下表格的修剪版本)。

<form method="post" action="/login/index" name="login_form" id="login_form" > 
<input type="hidden" name="dummy::login_form" id="dummy::login_form" value="1"> 
<input type="hidden" id="form::login_form" name="form::login_form" value="login_form"> 
<input type="hidden" value="http://www.cbssports.com/login" name="login_form::xurl" id="xurl"> 
<input type="hidden" value="150" name="login_form::master_product" id="master_product"> 
<input type="hidden" value="cbssports" name="login_form::vendor" id="vendor"> 
<input type="text" value="" name="login_form::userid" id="userid" size="30" maxlength="50" data-field-required="1"> 
<input type="password" value="" name="login_form::password" id="password" size="30" maxlength="12" data-field-required="1"> 
<input type="submit" value="Sign In" class="formButton"> 
</form> 
+0

他们也发布到错误的URL - 你可以在表单标签中看到的动作是*/login/index * – Chris

+0

我添加了所有隐藏的字段并按照建议修改了URL,但仍然无法获得登录的代码 – kcristella

+0

'$ url ='http://www.cbssports.com/login/index'; (''') $ fields = array( 'dummy :: login_form'=> urlencode('1'), 'form :: login_form'=> urlencode('login_form'), 'login_form :: xurl'=> urlencode(' http://www.cbssports.com/login'), 'login_form :: master_product'=> urlencode('150'), 'login_form :: vendor'=> urlencode('cbssports'), 'login_form: :用户ID '=>进行urlencode(' USERNAME '), 'login_form ::密码'=>进行urlencode(' 密码') );' – kcristella

0

如果你使用Firefox,我建议你做使用的LiveHTTPHeaders虚设职位,只是为了检查所有的岗位领域。

0

我知道这是旧的,但我用.NET来摆弄同样的东西。以下是内容字符串将是什么样子POST请求(使用C#字符串连接):

"dummy%3A%3Alogin_form=1&form%3A%3Alogin_form=login_form&login_form%3A%3Axurl=http%3A%2F%2Fwww.cbssports.com%2Flogin&login_form%3A%3Amaster_product=150&login_form%3A%3Avendor=cbssports&login_form%3A%3Auserid=" + userID + "&login_form%3A%3Apassword=" + password 

注意,杂隐藏字段也将需要在那里。我碰到的额外的catch是响应有多个cookie,你需要为后续的GET请求。因此,你需要使用某种容器,而不是追加一个“Set-cookie”头。这是行不通的,你的输出流将简单地从你重定向到的主页返回数据。

希望能帮助别人。