簡體   English   中英

iPhone上的REST API問題

[英]Problem with REST API on iPhone

我正在開發一個iPhone應用程序,該應用程序將使用RESTful API與Web服務進行交互。 我使用NSURLConnection來完成工作。 直到今天,網絡代碼都可以很好地滿足我的所有需求。

對於一個實例,URL(不包括站點)是這樣的:

/Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20

如果“ q”參數(在此示例中為BMW)少於3個字符,或者完全刪除了q參數,則我的應用可以獲取正確的數據。 但是,如果q的字符數超過3個,則只能返回具有空數據的合法json結構。

但是最奇怪的是,如果我使用另一個測試應用程序(Rested,一個用於測試REST服務的Mac應用程序)來測試相同的URL,它可以獲取所有正確的數據。 因此這不應該是服務的問題。

我的應用中的一些代碼:

NSURL *url = [[NSURL alloc] initWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSURLConnection *con = [NSURLConnection connectionWithRequest:req delegate:self];
if (con) {
    NSMutableData *data = [[NSMutableData alloc] init];
    self.responseData = data;
    [data release];
} else {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}

我使用netcat並獲得以下結果:(“令牌”字段用於Web服務的身份驗證)

使用Rested的請求:

GET /Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20 HTTP/1.1
Host: localhost:2000
User-Agent: Rested/1.3 CFNetwork/520.0.13 Darwin/11.0.0 (x86_64) (MacBookPro7%2C1)
Accept: */*
Token: {E53D7DED-510A-414D-824D-3433077CF064}
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
Connection: keep-alive

使用我的應用程序的請求:

GET /Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20 HTTP/1.1
Host: localhost:2000
User-Agent: Pazar/1.0 CFNetwork/485.13.9 Darwin/11.0.0
Token: {E53D7DED-510A-414D-824D-3433077CF064}
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive

我的應用為請求獲取的原始數據只有37個字節長。 使用SBJsonParser轉換后,它只是根級字典,數據字段為空。

那有什么可能是錯的呢?

一些調試技巧:

使用netcat -l -p 2000並使用http://localhost:2000/作為端點來捕獲原始請求。 也使用Rested捕獲請求並比較兩者。

另外,記錄您的原始響應以查看實際內容。 也許您的JSON轉換有問題。

編輯

由於請求看起來相同,因此請進一步:日志記錄代理。 這是我最喜歡的netcat代理,它將localhost:3000轉發到localhost:2000並記錄到infile和outfile。 根據需要進行修改,然后使用Rested和您的應用再次進行測試,以查看真正返回的內容::

mkfifo proxypipe
cat proxypipe | nc -l -p 3000 | tee -a inflow | nc localhost 2000 | tee -a outflow 1>proxypipe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM