2011-08-28 155 views
-3

我想從Java代碼呼叫到Web服務在目標C

public static void post(URL url, byte[] msg, String user, String pass) throws Exception 
{ 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 
    conn.setInstanceFollowRedirects(false); 
    conn.setUseCaches(false); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "text/xml"); 
    conn.setRequestProperty("Authorization", "Basic " + makeAuth(user,pass)); 
    //conn.setRequestProperty("Content-Length", msg.length + ""); 
    OutputStream out = conn.getOutputStream(); 
    out.write(msg); 
    out.flush(); 
    System.out.println("\n*** POST results ***"); 
    InputStream in = conn.getInputStream(); 
    printResults(in); 
    try {out.close();} catch (Exception whocares) {} 
    try {in.close();} catch (Exception whocares) {} 
} 

這裏被稱爲Web服務,其中URI是URL的Web服務進行客觀等價的C方法。 用戶和密碼是用戶名和密碼。

任何人都可以知道如何在目標c中調用相同的東西。

+0

'post'方法屬於哪個類?什麼樣的認證(基本,摘要,NTLM等)被用來檢查用戶名和密碼? POST請求的結果會怎樣?它被丟棄了嗎?這是工作的Java代碼或你編造的東西? – Codo

+0

對不起,這是方法調用。我已經更新了方法定義。現在你可以給我iPhone的代碼。 –

回答

1

你可以像使用基礎類一樣容易地做到這一點。

- (void)postUser:(NSString *)user andPass:(NSString *)pass toURL:(NSURL *)url 
{ 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30]; 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 
    [request addValue:[NSString stringWithFormat:@"Basic %@", makeAuth(user, pass)] forHTTPHeaderField:@"Authorization"]; 
    NSHTTPURLResponse *response = nil; 
    NSError *error = nil; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    NSLog(@"Response from server: %@", responseString); 
    [responseString release]; 
} 
0

一個易於使用和非常強大的選項是ASIHTTPRequest。 要發送POST請求,您應該使用ASIFormDataRequest,這使您可以輕鬆設置變量,訪問服務器所需的用戶名和密碼。

1

一種方法是使用ASIHTTPRequest(所建議的0xJoKe),並實現它是這樣的:

- (void)post:(NSData *)data toURL:(NSURL *)url username:(NSString *)username password:(NSString *) password 
{ 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setUsername:username]; 
    [request setPassword:password]; 
    [request addRequestHeader:@"Content-Type" value:@"text/xml"]; 
    [request appendPostData:data]; 
    [request startSynchronous]; 
    NSData *responseData= [request responseData]; 
    // do something with response 
} 

請注意,我用NSData實例,而不是字節數組。