Вход в систему, не отображая страницу входа в систему

Я пишу приложение, которое отобразит статьи в основанном на членстве веб-сайте.

Мы хотим, чтобы приложение смогло прочитать и отобразить статьи, которые установлены как "участники только" - даже если владелец приложений не является участником.

Таким образом, я хочу смочь войти в систему, не показывая пользователю приложения пользователя или информации о пароле.

Когда я пытаюсь получить доступ к участникам только статья, я получаю перенаправление, но я не получаю запрос аутентификации.

Какие-либо идеи, как я могу заставить свое приложение входить в систему автоматически?

Вот то, на что похожа форма. Я должен включать все входные значения в моем запросе 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>
5
задан Marc Gravell 16 January 2010 в 07:34
поделиться

2 ответа

Используйте http://allseeeing-i.com/asihttprequest/ Библиотека, которую проще использовать, то стандартные запросы NSURL. Также есть много действительно хорошего образца, если вам нравится видеть рабочий пример. Я использовал его в проекте недавно, и он работает очень хорошо, мне пришлось войти на сайт автоматически, и это работало отлично. Удачи.

Редактировать:

Глядя на форму, которую вы только что опубликовали. Этот код должен помочь вам, как вы отправите форму, используя библиотеку ASIHTTPRECEST. Это должно вас начать ...: 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];
3
ответ дан 15 December 2019 в 06:27
поделиться

Не уверен, как ваш сайт аутентифицируется... Но так как вы упомянули о перенаправлении, я предполагаю, что это происходит через какую-то веб-форму.

Когда мне приходилось делать что-то подобное, у меня был один объект, который заботился о веб-запросах, и он заботился о перенаправлении на страницу входа, затем продолжал на фактическую страницу, прежде чем отправить ответ потребителю объекта.

Интересные биты были бы в:

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

I did:(psuedo-ish code)

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 ;

Where the String for body was the www-form encoded params that web form would have generated in the browser. У сайта был параметр next_url, который переадресовывал страницу, когда логин был правильным.
Позже в коде я проверяю, чтобы убедиться, что вход был успешным, но проверяю, был ли я перенаправлен на правильную страницу или на плохую страницу входа.

0
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: