Я пишу приложение, которое отобразит статьи в основанном на членстве веб-сайте.
Мы хотим, чтобы приложение смогло прочитать и отобразить статьи, которые установлены как "участники только" - даже если владелец приложений не является участником.
Таким образом, я хочу смочь войти в систему, не показывая пользователю приложения пользователя или информации о пароле.
Когда я пытаюсь получить доступ к участникам только статья, я получаю перенаправление, но я не получаю запрос аутентификации.
Какие-либо идеи, как я могу заставить свое приложение входить в систему автоматически?
Вот то, на что похожа форма. Я должен включать все входные значения в моем запросе 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>
Используйте 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];
Не уверен, как ваш сайт аутентифицируется... Но так как вы упомянули о перенаправлении, я предполагаю, что это происходит через какую-то веб-форму.
Когда мне приходилось делать что-то подобное, у меня был один объект, который заботился о веб-запросах, и он заботился о перенаправлении на страницу входа, затем продолжал на фактическую страницу, прежде чем отправить ответ потребителю объекта.
Интересные биты были бы в:
- (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, который переадресовывал страницу, когда логин был правильным.
Позже в коде я проверяю, чтобы убедиться, что вход был успешным, но проверяю, был ли я перенаправлен на правильную страницу или на плохую страницу входа.