. Мой пользователь вводит адрес получателя (адрес улицы не по электронной почте). Мне нужно проверить его с помощью USPS, поэтому я знаю, что это фактически адрес.Проверка адресного адреса
Я сейчас разбираюсь в их API, и я думаю, что я это понимаю, но я не совсем уверен, как это сделать с помощью объектива-c.
Так в значительной степени это работает так:
- Я должен создать запрос XML, который содержит имя получателя, адрес и почтовый индекс.
- я должен опубликовать, что их сервер
- Они реагируют с ответом XML
Вот пример того, что один из их построенного запроса XML выглядит следующим образом:
http://SERVERNAME/ShippingAPITest.dll?API=Verify&XML=<AddressValidateRequest% 20USERID="xxxxxxx"><Address ID="0"><Address1></Address1>
<Address2>6406 Ivy Lane</Address2><City>Greenbelt</City><State>MD</State> <Zip5></Zip5><Zip4></Zip4></Address></AddressValidateRequest>
НЕМНОГО искажено, но разбито:
http://SERVERNAME/ShippingAPITest.dll?API=Verify&XML=
<AddressValidateRequest% 20USERID="xxxxxxx">
<Address ID="0">
<Address1></Address1>
<Address2>6406 Ivy Lane</Address2>
<City>Greenbelt</City>
<State>MD</State>
<Zip5></Zip5>
<Zip4></Zip4>
</Address>
</AddressValidateRequest>
Моя первая идея кажется очевидной, но, возможно, лучший способ сделать это. Так как корм XML короткого, я должен идти о строительстве простого делать что-то вдоль линий:
NSString * запрос = [NSString stringWithFormat: @ «......»]
Где заполненная и форматируется вдоль строк, указанных выше.
Второй вопрос: как правильно отправить эту информацию на сервер?
Я просто создаю запрос NSURL и с URL как построенная строка XML?
Вот что у меня есть, но я получаю, что URL был построен неправильно:
- (void)verifyAddress:(Recipient*)_recipient {
NSURL *_url = [NSURL URLWithString:@"http://testing.shippingapis.com/ShippingAPITest.dll?API=Verify&XML=<AddressValidateRequest%20USERID=\"********\"><Address ID=\"0\"><Address1></Address1><Address2>6406 Ivy Lane</Address2><City>Greenbelt</City><State>MD</State><Zip5></Zip5><Zip4></Zip4></Address></AddressValidateRequest>"];
// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:_url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = [NSMutableData data];
NSString* newStr = [[NSString alloc] initWithData:receivedData
encoding:NSUTF8StringEncoding];
NSLog(@"the response '%@'", newStr);
} else {
// Inform the user that the connection failed.
NSLog(@"error");
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// This method is called when the server has determined that it
// has enough information to create the NSURLResponse.
// It can be called multiple times, for example in the case of a
// redirect, so each time we reset the data.
// receivedData is an instance variable declared elsewhere.
[receivedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
// inform the user
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString* newStr = [[NSString alloc] initWithData:receivedData
encoding:NSUTF8StringEncoding];
NSLog(@"the response '%@'", newStr);
// do something with the data
// receivedData is declared as a method instance elsewhere
NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
}
Я получаю следующее сообщение об ошибке:
Connection failed! Error - bad URL (null)
Мой единственный вопрос сейчас, я делаю все в порядке насколько NSURLConnection идет? Я могу поиграть с URL-адресом, я просто хочу убедиться, что моя реализация в порядке, поэтому я не бегаю по кругу. : P
Я добавил новый код, не могли бы вы снова взглянуть? – random
Вы не используете 'NSURLConnection' правильно. Пожалуйста, прочитайте * [Использование NSURLConnection] (https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE) * в * Руководство по программированию системы загрузки URL *. –
Прошу прощения, я обновил все правильную реализацию. – random