2010-04-05 156 views
2

在我開始:我編程的iPhone,用客觀的C.參數發送到Web服務

我已經執行到使用的NSURLRequest和NSURLConnection的網絡服務功能的調用。該函數然後返回一個XML與我需要的信息。

的代碼如下:

NSURL *url = [NSURL URLWithString:@"http://myWebService/function"]; 
NSMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
NSURLConnection theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

我也實現的方法

  • didRecieveResponse
  • didRecieveAuthenticationChallenge
  • didRecievedData
  • didFailWithError
  • connectionDidFinishLoading。

它的功能完美。

現在我需要發送2個參數到函數:「位置」和「模塊」。
我嘗試使用以下修改:

NSMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
[theRequest setValue:@"USA" forHTTPHeaderField:@"location"]; 
[theRequest setValue:@"DEVELOPMENT" forHTTPHeaderField:@"module"]; 
NSURLConnection theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

但它似乎並沒有工作。 我做錯了什麼?有沒有辦法知道我是否使用了錯誤的參數名稱(也許它是「位置」或「位置」或無關緊要?)? 還是有辦法知道哪些參數是等待功能...

額外的信息:
我沒有訪問網絡服務的來源,所以我不能修改它。 但我可以訪問WSDL。做這個功能的人說的都在那裏......但我無法理解它。 < ...

任何幫助,將不勝感激。 :)

+0

沒錯!我認爲headerFields不是做這個的地方...但我絕望XD – 2010-04-06 14:51:17

+0

如果你可以訪問WSDL,你可能想看看wsdl2objc:http://code.google.com/p/wsdl2objc/ – 2010-05-24 20:46:55

回答

0

幾個例子GET郵政SOAP

GET請求

GET /index.html?userid=joe&password=guessme HTTP/1.1 
Host: www.mysite.com 
User-Agent: Mozilla/4.0 

發佈採購信息

POST /login.jsp HTTP/1.1 
Host: www.mysite.com 
User-Agent: Mozilla/4.0 
Content-Length: 27 
Content-Type: application/x-www-form-urlencoded 

userid=joe&password=guessme 

SOAP請求

POST /InStock HTTP/1.1 
Host: www.example.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 

<?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/stock"> 
    <m:GetStockPrice> 
    <m:StockName>IBM</m:StockName> 
    </m:GetStockPrice> 
</soap:Body> 

</soap:Envelope> 

的主機,用戶代理,內容 - 長度,鈷內容類型是請求標頭中的項目

0

如果涉及到WSDL,它可能是一個SOAP Web服務,所以它可能期望一些SOAPy XML作爲輸入,我不認爲你這樣做。看看這個問題可能是:How to access SOAP services from iPhone

1

您正在設置HTTP頭中的值,而不是HTTP請求中的GET或POST參數。這可能不是你想要做的。

如果服務器接受GET請求參數,你也許能夠做這樣的事在URL:

"http://myWebService/function?location=USA&module=DEVELOPMENT" 

如果做不到這一點,你必須去充分的SOAP路線爲MK說。

+0

謝謝,我會嘗試這第一nn – 2010-04-06 14:49:43

+0

@Ajjandra注意:我只是糾正了一個錯誤的URL字符串:應該是一個「?」之前的參數,不是「;」因爲我有 – 2010-04-06 14:56:22

+0

無法正常工作,似乎我需要使用SOAP。 – 2010-04-06 15:25:54

3

花了我幾個小時纔得到這個工作,所以我想我會發布我的解決方案,以便將來可以節省別人的一些時間。這就是我如何通過使用字符串參數從.NET WCF服務中獲取JSON數據的Objective-C。

(我使用Wireshark來捕獲.NET客戶端說話WCF服務,所以我知道我需要什麼,從我的iOS客戶端傳遞)

static NSString *feedURLString = @"http://www.mydomain.com/DownloadService.svc"; 
NSMutableURLRequest *faURLRequest = 
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:feedURLString]]; 

[faURLRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[faURLRequest setHTTPMethod:@"POST"]; 
[faURLRequest addValue:@"http://tempuri.org/IDownloadService/GetChanges" forHTTPHeaderField:@"SOAPAction"]; 

NSString *localLastSync; 
if (userProfile.lastSync == nil) 
{ 
    localLastSync = @"2011-09-01T12:00:00"; 
} 
else 
{ 
    localLastSync = userProfile.lastSync; 
} 

NSString *soapMessage = [NSString stringWithFormat: 
         @"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
         "<s:Body >\n" 
         "<GetChanges xmlns=\"http://tempuri.org/\">\n" 
         "<lastSync>%@</lastSync>\n" 
         "</GetChanges>\n" 
         "</s:Body>\n" 
         "</s:Envelope>\n", localLastSync]; 
[faURLRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

self.downloadConnection = 
[[NSURLConnection alloc] initWithRequest:faURLRequest delegate:self];