2015-07-19 23 views
0

有一個外部網站,我希望能夠從我的網站登錄。外部網站有這個HTML:PHP發佈數據登錄外部網頁

<form action="/Login" method="post"> 


      <div style="width: 280px; margin-left: auto; margin-right: auto; margin-top: 150px; padding: 10px 10px 10px 10px;" class="ui-corner-all"> 
       <div class="pw-input-group"> 
        <span class="pw-input-group-addon"> 
         <i class="fa fa-user fa-fw"></i> 
        </span> 
        <input id="username" name="username" class="required text pw-form-control" type="text" placeholder="Username" minlength="2" maxlength="45" /> 
       </div> 
       <div class="pw-input-group"> 
        <span class="pw-input-group-addon"> 
         <i class="fa fa-key fa-fw"></i> 
        </span> 
        <input id="password" name="password" class="required text pw-form-control" type="password" placeholder="Password" minlength="2" maxlength="45" /> 
       </div> 
       <div style="float: right;"> 
        <input id="loginbutton" name="submit" style="line-height: 1.42857; padding: 6px 12px; font-size: 14px; color: #555;" type="submit" value="Login" /> 
       </div> 
      </div> 
     </form> 

我已經用我的網站上這個PHP代碼的嘗試:

//set POST variables 
$url = 'https://portal.external-website.co.uk/Login'; 
$fields = array(
       'username' => urlencode("username"), 
       'password' => urlencode("password"), 
       'submit' => 'Login' 
       ); 

//url-ify the data for the POST 
foreach($fields as $key=>$value) { 
    $fields_string .= $key.'='.$value.'&'; 
} 
rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 

//we need to ignore SSL errors here 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

//execute post 
$result = curl_exec($ch); 
var_dump($result); 
echo curl_getinfo($ch) . '<br/>'; 
echo curl_errno($ch) . '<br/>'; 
echo curl_error($ch) . '<br/>'; 

//close connection 
curl_close($ch); 

它顯示

bool(true) Array 
0 

但是當我再次訪問該網站,其告訴我我沒有登錄

我怎麼能得到這個登錄我?

+0

您還沒有登錄客戶端,但您的服務器。 – Richard

+0

此外:'foreach($ fields as $ key => $ value){ $ fields_string。= $ key。'='。$ value。'&'; } rtrim($ fields_string,'&');'與'http_build_query($ fields_string)'是一樣的''''rtrim'有一個返回值,不直接編輯變量,你必須重新分配它 – Richard

+0

我當時試圖從一個只能在登錄時才能看到的頁面訪問內容,爲此我使用'file_get_contents('url.com');' - 當我做了'var_dump'這個它只顯示我的登錄頁面外部網站 – charlie

回答

-1

外部網站通過放置cookie來記錄您的登錄狀態,以存儲會話參考或令牌很有可能。當您從瀏覽器以外的地方發佈信息時,無法設置此cookie。

+0

如果你真的想,你可以設置一個'cookiejar'並將其傳送到你的本地機器:D – Richard

+0

事情可能會變得非常醜陋: p – 1sloc

0

根據您的意見,這應該是在登錄後抓取的網頁的解決方案:

$cookieFile = tempnam(__DIR__, ""); 
$loginUrl = 'https://portal.external-website.co.uk/Login'; 

$fields = array(
    'username' => "username", 
    'password' => "password", 
    'submit' => 'Login', 
); 
$fields_string = http_build_query($fields); 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, $loginUrl); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
$result = curl_exec($ch); 
curl_close($ch); 

$fetchUrl = "https://portal.external-website.co.uk/Profile/123"; 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, $fetchUrl); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$result = curl_exec($ch); // This should be the sites content 
curl_close($ch); 

unlink($cookieFile); 
+0

我已經做了'var_dump($ result);''curl_close'之前,所有顯示的是'string(0)'「' – charlie

+0

@charlie:哪個'$ result'?第一個還是第二個? – Richard

+0

都顯示相同的東西 – charlie