2010-01-16 591 views
5

我正在編寫一個應用程序,該應用程序將在基於會員的網站上顯示文章。登錄時不顯示登錄頁面

我們希望應用能夠讀取並顯示被設置爲「僅成員」的文章 - 即使該應用程序所有者不是成員。

所以我希望能夠不顯示應用程序用戶的任何用戶名或密碼信息登錄。

當我試圖訪問一個成員只有文章中,我得到一個重定向,但我沒有得到認證的挑戰。

任何想法如何,我可以得到我的應用程序自動登錄?

這裏的形式是什麼樣子。我是否必須在我的POST請求中包含所有輸入值?

<FORM ACTION="https://www.mysite.com/cgi-bin/mysite/process" METHOD=POST> 
<input type="hidden" NAME="mv_todo" VALUE="return"> 
<input type="hidden" name="mv_session_id" value="DySUxWM5"> 
<INPUT TYPE="hidden" name="mv_success_variable_hash" VALUE=""> 
<INPUT TYPE="hidden" name="mv_success_variable_hash_colon" VALUE=""> 
<INPUT TYPE="hidden" NAME="mv_successpage" VALUE="index"> 
<input type="hidden" name="mv_failpage" value="login"> 

<input value="1942255628Hx0xE2S5iCw0caMyNmrf7j2ROvvM0QUJoEVLVz+2PRq4Jjs4azdjrjWSnwN7JkIr" name="form_fn" type="hidden"><input value="login" name="form_page" type="hidden"><input value="1" name="login_form_2_revisit" type="hidden"><table cellpadding="4" class="standard_form"> 
<tr><td colspan="2"><font color=red><b>New Visitors:</b></font> <a href="http://www.mysite.com/cgi-bin/mysite/account_create.html">Create a new account</a></td></tr> 
<tr><td class="standard_form_field"><b>Username:</b></td> 
<td colspan="1"><input maxlength="64" name="mv_username" onChange="if (this.value.match(/(^\s+)|(\s+$)/)){this.value = this.value.replace(/(^\s+)|(\s+$)/g,'');}if (this.value.match(/^$/) && !this.getAttribute('js_init_now')) {alert('This is a required field. Please make sure that it is not empty.'); this.focus();this.select();return false; }; " type="text" size="15"></td></tr> 

<tr><td class="standard_form_field">Password:</td> 
<td colspan="1"><input name="mv_password" type="password" size="15"></td></tr> 
<tr><td colspan="2"><input value="1" name="persistent_login" type="checkbox"> Remember my login info.</td></tr> 
<tr><td colspan="2"><input value="" name="login_complete_param" type="hidden"> <input value="Continue..." name="ig_click form-method:continue" type="submit" class="coolButton"></td></tr> 
</table> 
<p ></p> 

</form> 

回答

3

使用http://allseeing-i.com/ASIHTTPRequest/庫的很多更容易使用那麼標準NSURL請求。如果你喜歡看到一個實例,還有很多非常好的示例代碼。我最近在一個項目中使用它,它工作得很好,我不得不自動登錄到一個網站,它的工作完美。祝你好運。

編輯:

看着你剛發佈的表格。此代碼應該可以幫助您,您將如何使用ASIHTTPREQUEST庫提交表單。這應該讓你開始......:D

NSURL *url = [NSURL URLWithString:@"https://www.mysite.com/cgi-bin/mysite/process"]; 
ASIFormDataRequest *requestPOST = [ASIFormDataRequest requestWithURL:url]; 
[requestPOST setPostValue:@"return" forKey:@"mv_todo"]; 
[requestPOST setPostValue:@"DySUxWM5" forKey:@"mv_session_id"]; 
[requestPOST setPostValue:@"" forKey:@"mv_success_variable_hash"]; 
[requestPOST setPostValue:@"" forKey:@"mv_success_variable_hash_colo"]; 
[requestPOST setPostValue:@"index" forKey:@"mv_successpage"];     
[requestPOST setPostValue:@"login" forKey:@"mv_failpage"];     
[requestPOST setPostValue:@"942255628Hx0xE2S5iCw0caMyNmrf7j2ROvvM0QUJoEVLVz+2PRq4Jjs4azdjrjWSnwN7JkIr" forKey:@"form_fn"]; 
[requestPOST setPostValue:@"login" forKey:@"form_page"]; 
[requestPOST setPostValue:@"1" forKey:@"login_form_2_revisit"]; 
[requestPOST setPostValue:@"PUT YOUR USERNAME VARIABLE IN HERE" forKey:@"mv_username"]; 
[requestPOST setPostValue:@"PUT YOUR PASSWORD VARIABLE IN HERE" forKey:@"mv_password"]; 
[requestPOST setPostValue:@"1" forKey:@"persistent_login"]; 
[requestPOST setPostValue:@"" forKey:@"login_complete_param"]; 
[requestPOST setPostValue:@"Continue..." forKey:@"ig_click form-method:continue"]; 
[requestPOST start]; 
+0

這很好用。謝謝。 – 2010-01-17 00:43:00

+0

沒問題:D !! – 2010-01-17 20:20:33

0

不確定您的網站如何進行身份驗證......但由於您提到被重定向,我假設它通過一些網絡表單。

當我必須做類似的事情時,我有一個對象來處理webrequests,它負責重定向到登錄頁面,然後繼續到實際頁面,然後向消費者發送響應物體。

有趣的位將是:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse { ... 

我所做的:(僞上下的代碼)

NSURL* redirected_url = [request URL] ; 
NSString* querystr = [redirected_url query] ; 
if ([self need_to_login:redirected_url]) { 
    NSString* body = [self generate_login_body_string] ; 
    request = [self makeRequestLocation:@"/sign_in" Method:@"POST" Body:body] ; 
} 
return request ; 

凡體字符串是WWW的形式編碼PARAMS的Web表單將在瀏覽器中生成。該網站有一個next_url參數,該頁面可以在登錄正確時轉發。
在代碼後面我檢查以確保登錄成功,但檢查是否將我重定向到正確的頁面或重定向到錯誤的登錄頁面。