2014-09-01 40 views
1

我正在使用一個天藍色的API端點。 ....azure-api.net/...。當我嘗試使用Charles代理查看HTTP請求/響應時,HTTP響應爲空。該請求在我關閉代理時起作用。我們如何嘲笑天藍色的終點?

我想攔截請求並模擬自動測試的響應。

我可以查看使用Charles代理的其他服務器的其他HTTP端點。所以我相信azure有一些特殊的東西阻止了請求的完成。

  • azure如何知道中間有一個代理服務器,它不與客戶端交談?
  • 有沒有辦法配置azure API來允許Charles工作? (由於查看HTTP流量對於開發很有用)
  • 是否有另一種方法可以讓流量拙劣地被嘲弄?例如。主機重定向?

我使用標準iOS網絡代碼

NSURL *url = [NSURL URLWithString:@"https://MyDomain.azure-api.net/a/b/2?subscription-key=myKey"]; 

[[[NSURLSession sharedSession] dataTaskWithRequest:[NSURLRequest requestWithURL:url] 
           completionHandler: 
    ^(NSData *data, NSURLResponse *response, NSError *error) { 

    NSLog(@"%@, error: %@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding], error); 
    ; 

}] resume]; 

下面是從查爾斯代理截圖。連接請求後沒有響應。

Request

+0

如果您在Windows平臺上工作,您是否嘗試過使用Fiddler(http://www.telerik.com/download/fiddler)來獲取HTTP流量?我還沒有看到無法使用Fiddler處理的網絡流量。 – astaykov 2014-09-05 10:30:32

+0

你用什麼來在你的iOS應用上提出請求?你可以在代碼中訪問JSON響應嗎? – Moxy 2014-09-07 11:20:37

+0

@Moxy - 我們在'AFNetworking'封裝中使用'NSURLConnection'。當Charles不在運行時,我們可以在代碼中看到請求和響應。 Charles在運行連接失敗時出現SSL錯誤。 – Robert 2014-09-18 12:06:34

回答

0

爲了攔截請求並返回一個假的響應,你在Xcode調試時可以使用OHHTTPStubs

要被啓用做到這一點,您應記錄響應或使用該文檔。

在你執行你的測試,呼叫

stub = [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 
      return [request.URL.absoluteString isEqualToString:@"https://MyDomain.azure-api.net/a/b/2?subscription-key=myKey"]; 
     } 
          withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { 
              NSString *fixture = OHPathForFileInBundle(@"fakeResponse.json", nil); 
              return [OHHTTPStubsResponse responseWithFileAtPath:fixture 
                        statusCode:200 
                         headers:@{@"Content-Type":@"text/json"}]; 
             }]; 

你執行你的測試後,你應該叫

[OHHTTPStubs removeStub:stub]; 

「fakeResponse.json」必須是一個文件只添加到您的測試目標,您可以使用不同的JSON文件進行不同的測試。例如,您可以傳遞一個帶有錯誤或空白內容的JSON,以測試您的應用程序是否按照您希望的方式運行。