2

我正在使用 azure API 端点。 ....azure-api.net/.... 当我尝试使用 Charles 代理查看 HTTP 请求/响应时,HTTP 响应为空。当我关闭代理时,请求有效。

为了自动化测试,我想拦截请求并模拟响应。

我可以使用 Charles 代理查看到其他服务器的其他 HTTPS 端点。所以我相信 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];

以下是 Charles Proxy 的屏幕截图。连接请求后没有响应。

要求

4

1 回答 1

0

为了拦截请求并返回虚假响应,您可以使用OHHTTPStubs

要启用它,您应该在从 Xcode 调试时记录响应或使用文档。

在执行测试之前,请致电

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带有错误或空内容的 a 来测试您的应用程序是否按照您希望的方式运行。

于 2014-09-22T10:43:24.117 回答