2010-01-16 385 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参数,该页面可以在登录正确时转发。
在代码后面我检查以确保登录成功,但检查是否将我重定向到正确的页面或重定向到错误的登录页面。