2011-11-16 121 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」頭。這是行不通的,你的輸出流將簡單地從你重定向到的主頁返回數據。

希望能幫助別人。