2015-03-10 2 views
0

Я пытаюсь найти способ автоматического входа на этот сайт, передав имя пользователя и пароль в URL-адрес, но я не могу заставить его работать.Войти на сайт .do автоматически (xcode)

URL-адрес является: https://egov.uscis.gov/casestatus/displayLogon.do

Я пробовал: https://egov.uscis.gov/casestatus/displayLogon.do?username=myUsername&password=secretPassword

, но он не работает. Есть идеи?

Я попытался это, но не повезло:

NSString *Url = @"https://egov.uscis.gov/casestatus/logon.do"; 

    NSString *username = @"username"; 
    NSString *password = @"password"; 

    NSString *soapMessage = [NSString stringWithFormat:@"username=%@&password=%@", username, password]; 

    NSURL *url = [NSURL URLWithString:Url]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]]; 

    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

--- Update --- Вот где я в настоящее время, до сих пор не могу войти.

password = [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
username = [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
namePassword = [namePassword stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
nameUsername = [nameUsername stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSURL *url = [NSURL URLWithString:@"https://egov.uscis.gov/casestatus/logon.do"]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 

NSString *postData = [NSString stringWithFormat:@"%@=%@&%@=%@", nameUsername, username, namePassword, password]; 

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

[request setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
self.connection = connection; 

[connection start]; 
+0

Из источника: '

'. Для этого требуется запрос POST. – Phylogenesis

+0

Как вы пробовали запрос POST? – Popeye

+0

Кажется, я не могу заставить запрос POST работать. – FlatDog

ответ

0

При общении с сервером на веб-сайте есть некоторые варианты. Для входа вы можете использовать (как разработчик на сервере) «POST» и «GET». То, что вы делаете, это метод GET. Вы можете сразу узнать, является ли это методом входа в систему, введя некоторые учетные данные и попробуйте войти в систему. Вы увидите, что поля отображаются в адресной строке (вам даже не нужны правильные учетные данные).

Так что, скорее всего, это будет POST. Таким образом вы отправляете учетные данные на сервер по полям, которые сначала невидимы или «обычным» пользователям. Существует несколько бесплатных материалов, чтобы узнать, какое имя будет использоваться при отправке запроса POST. Вы можете нажать f12 в firefox (будет что-то подобное для других браузеров) и увидеть все HTML. И вы действительно можете видеть, что они используют «пароль» и «имя пользователя» для имен полей (хотя это необязательно!). Вам нужно будет отправить свое имя пользователя и пароль в эти поля, чтобы попытаться заставить его работать.

Основываясь на ваших тегах, я предполагаю, что вы хотите сделать это в Xcode с объективом-c или Swift. Для цели-c вы можете искать «NSURLconnection» или более новую «NSURLSession».

Существует много вы можете прочитать, но для начала это полезно прочитать: http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example/. Но вы можете попробовать практически любой учебник.

0

Кажется, что вам нравится использовать GET, а веб-сервис предназначен для использования метода POST. Вы можете просто проверить веб-сервис GET или POST, вставив целые строки в адресную строку веб-браузера. Или вы можете использовать почтовый агент Chrome Extension, чтобы проверить правильность веб-сервиса и параметры тестирования.

В моем опыте с использованием SOAP оно отправляло сообщение SOAP как тело сообщения, и ваш код кажется измененным, как показано ниже;

NSString *Url = @"https://egov.uscis.gov/casestatus/logon.do"; 

NSString *username = @"username"; 
NSString *password = @"password"; 

NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\"?> 
    <soap:Envelope 
    xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" 
    soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\"> 
    <soap:Body xmlns:m=\"http://www.example.org/logon.do\"> 
    <m:logon.do> 
    <m:username>%@</m:username> 
    <m:password>%@</m:password> 
    </m:logon.do> 
    </soap:Body> 
    </soap:Envelope>", username, password]; 

NSURL *url = [NSURL URLWithString:Url]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)   [soapMessage length]]; 

[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

Этот шаблон сообщения с мылом неправильный, но вам нужно отправить все параметры обертывания мыльного пакета, а не только параметры.

+0

Как вы знаете, что сайт поддерживает запросы SOAP? – Popeye

+0

Я не знаю, поддерживает ли он SOAP! Я пробую разные вещи, пока это не сработает, я учусь и новичок! Спасибо за подсказку re: Postman extension. Даже используя это, я не могу заставить его работать, хотя :( – FlatDog

+0

Чтобы узнать, работает ли он с SOAP, вам нужно связаться с разработчиком веб-сервисов, и вы можете получить от него информацию о WSDL для каждого запроса. – vichevstefan

Смежные вопросы