1

RESTAPIをベースにしたWebサービスを開発します。これは私の最初のWebサービスプロジェクトです。

Webサービス(iPhoneアプリ)について質問があります。

ユーザーがiPhoneアプリを使用してログインしたときに、認証トークンを取得するとします。

このトークンを使用すると、アプリのさらなる操作を使用することが許可されます。私は、iPhoneアプリが、遊牧民の認証キーを使用したpost/getリクエストメソッドとともに聞き手に送信する必要があることを計画しています。

リクエストは次のようになります:www.mydomaoin.com

ただし、サーバーで承認するには、リクエストのヘッダーに特別なパラメーターを渡す必要があります。

Headers: X-Testing-Auth-Secret: kI7wGju76kjhJHGklk76
Headers: Content-Type : application/json

コントローラ(zendフレームワーク)で使用されます

public function preDispatch()  
{
    $request = new Zend_Controller_Request_Http();
    $key = $request->getHeader('X-Testing-Auth-Secret');
    $type = $request->getHeader('Content-Type');
}

ヘッダーを送信できるiPhoneかどうかはわかりません。アンドロイドの場合のように。

私はPHP開発者です

私を助けてください

4

5 に答える 5

2

はい、iPhoneだけでなくAndroid携帯からもヘッダーを送信できます

于 2013-03-01T09:46:35.197 に答える
2

次のコードを使用できます

NSMutableURLRequest *req = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:url]];
    NSString *post = @"your json";
    //NSLog(@"%@",post);
    NSData *postdata = [NSData dataWithBytes:[post UTF8String] length:[post length] ];
    [req setHTTPMethod:@"POST"];
    [req setValue:@"application/json" forHTTPHeaderField:@"content-type"];
    [req setValue:@"kI7wGju76kjhJHGklk76" forHTTPHeaderField:@"Content-Length"];
    [req setValue:[NSString stringWithFormat:@"%d",[postdata length]] forHTTPHeaderField:@"X-Testing-Auth-Secret"];
    [req setHTTPBody:postdata];

    (void)[NSURLConnection connectionWithRequest:req delegate:self];
于 2013-02-21T05:36:05.037 に答える
2

使用できるデリゲートメソッドがいくつかあります。

-(void) parser:(NSXMLParser *) parser
didStartElement:(NSString *) elementName``
  namespaceURI:(NSString *) namespaceURI
 qualifiedName:(NSString *) qName
   attributes:(NSDictionary *) attributeDict {

    if( [elementName isEqualToString:@"AddGeneralInformationResult"])
   {
    if (!soapResults)
    {
        soapResults = [[NSMutableString alloc] init];
    }
    elementFound = YES;
   }


    }

  -(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string
   {
if (elementFound)
{
    [soapResults appendString: string];
}
}

-(void)parser:(NSXMLParser *)parser
 didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
  qualifiedName:(NSString *)qName
 {

 if ([elementName isEqualToString:@"AddGeneralInformationResult"])
 {
    elementFound = NO;
    //NSLog(@"AddGeneralInformationResult %@",soapResults);
    if([soapResults isEqualToString:@"true"])
    {


  [objDB updateDatabaseTable:@"GeneralInformation":@"Yes":
    [[arrGenralInfo          objectAtIndex:0] intValue]];
    }
    [soapResults setString:@""];
    elementFound = FALSE;
   }


  }
 -(void) connection:(NSURLConnection *) connection
 didReceiveResponse:(NSURLResponse *) response {
 [webData setLength: 0];

//NSLog(@"receive response");
  }  

 -(void) connection:(NSURLConnection *) connection
 didReceiveData:(NSData *) data {
  [webData appendData:data];
  }

    -(void) connection:(NSURLConnection *) connection
       didFailWithError:(NSError *) error {

    //NSLog(@"Server error");

    }

  -(void) connectionDidFinishLoading:(NSURLConnection *) connection {
     //NSLog(@"DONE. Received Bytes: %d", [webData length]);
      NSString *theXML = [[NSString alloc]
                    initWithBytes: [webData mutableBytes]
                    length:[webData length]
                    encoding:NSUTF8StringEncoding];
//---shows the XML---
//NSLog(@"%@",theXML);

// [activityIndicator stopAnimating];
if (xmlParser)
{

}
xmlParser = [[NSXMLParser alloc] initWithData: webData];
[xmlParser setDelegate: self];
[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser parse];

}

于 2013-02-21T07:04:37.643 に答える
1

これは、「Post」リクエストにトークンを追加する方法です。サンプルコード:

NSURL *url = [NSURL URLWithString:@"http://www.deveinvoice.sirus/process/user.asmx"];
req = [NSMutableURLRequest requestWithURL:url];

//---set the headers---

NSString *msgLength = [NSString stringWithFormat:@"%d",[strSoapMsg length]];
[req addValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://tempuri.org/CheckTransactionIDExist" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];

//---set the HTTP method and body---

[req setHTTPMethod:@"POST"];
[req setHTTPBody: [strSoapMsg dataUsingEncoding:NSUTF8StringEncoding]];
于 2013-02-21T05:35:31.487 に答える
1

xmlデータの解析をリクエストします。

それがリクエストの方法だとしましょう-

-(void)PostPipeSeAamAnomaly {

NSString *soapMsg =
[NSString stringWithFormat:
 @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 "<soap:Envelope xmlns:xsi="
 "\"http://www.w3.org/2001/XMLSchema-instance\" "
 "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
 "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
 "<soap:Body>"
 "<PostPipeSeAamAnomaly xmlns=\"http://tempuri.org/\">"
 "<PDAIRID>%d</PDAIRID>n"
 "<AssociatedItemIDILI>%@</AssociatedItemIDILI>n"
 "<AssociatedItemIDOther>%@</AssociatedItemIDOther>n"
 "<RGW>%@</RGW>n"
 "<StartDistance>%@</StartDistance>n"
 "<Length>%@</Length>n"
 "<Width>%@</Width>n"
 "<Orientation1>%@</Orientation1>n"
 "<Orientation2>%@</Orientation2>n"
 "<AnomalyType>%@</AnomalyType>n"
 "<OrientationToWeld>%@</OrientationToWeld>n"
 "<LongestLinearIndication>%@</LongestLinearIndication>n"
 "<LocalWallThickness>%@</LocalWallThickness>n"
 "<AnomalyDepthMinimum>%@</AnomalyDepthMinimum>n"
 "<AnomalyDepthAverage>%@</AnomalyDepthAverage>n"
 "<AnomalyDepthMaximum>%@</AnomalyDepthMaximum>n"
 "<AnomalyDepthSurface>%@</AnomalyDepthSurface>n"
 "<AnomalyDepthMaximumPercentage>AA</AnomalyDepthMaximumPercentage>n"
 "<AnomalyDepthMinimumPercentage>AA</AnomalyDepthMinimumPercentage>n"
 "<SizingMethod>%@</SizingMethod>n"
 "<AnomalyRemoved>%@</AnomalyRemoved>n"
 "<RemedialActionRequired>%@</RemedialActionRequired>n"
 "<RemedialActionIncidental>%@</RemedialActionIncidental>n"
 "<Comment>%@</Comment>n"
 "</PostPipeSeAamAnomaly>n"
 "</soap:Body>"
 "</soap:Envelope>",PDAirID ,[arrPipeSeamAnomaly objectAtIndex:2] ,[arrPipeSeamAnomaly objectAtIndex:3],[arrPipeSeamAnomaly objectAtIndex:4] ,[arrPipeSeamAnomaly objectAtIndex:5] ,[arrPipeSeamAnomaly objectAtIndex:6],[arrPipeSeamAnomaly objectAtIndex:7] ,[arrPipeSeamAnomaly objectAtIndex:8] ,[arrPipeSeamAnomaly objectAtIndex:9],[arrPipeSeamAnomaly objectAtIndex:10],[arrPipeSeamAnomaly objectAtIndex:11] ,[arrPipeSeamAnomaly objectAtIndex:12] ,[arrPipeSeamAnomaly objectAtIndex:13],[arrPipeSeamAnomaly objectAtIndex:2] ,[arrPipeSeamAnomaly objectAtIndex:2],[arrPipeSeamAnomaly objectAtIndex:14] ,[arrPipeSeamAnomaly objectAtIndex:15],[arrPipeSeamAnomaly objectAtIndex:16] ,[arrPipeSeamAnomaly objectAtIndex:17],[arrPipeSeamAnomaly objectAtIndex:18],[arrPipeSeamAnomaly objectAtIndex:19] ,[arrPipeSeamAnomaly objectAtIndex:20]];

//NSLog(@"%@",soapMsg);
NSURL *url = [NSURL URLWithString:
              WEBSERVICEURL];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

//---set the various headers---
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://tempuri.org/PostPipeSeAamAnomaly" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];

//---set the HTTP method and body---
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

//[activityIndicator startAnimating];


conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn) {
    webData = [NSMutableData data];


    //NSLog(@"go to delegateMethods");
}

}

于 2013-02-21T06:57:24.857 に答える