Ios 我们如何模拟azure端点?
我正在使用azure API端点<代码>…azure api.net/…。当我尝试使用Charles代理查看HTTP请求/响应时,HTTP响应为空。当我关闭代理时,请求会起作用 为了自动化测试的目的,我想拦截请求并模拟响应 我可以使用Charles proxy查看其他服务器的其他HTTPs端点。因此,我相信azure有一些特殊之处,阻止了请求的完成Ios 我们如何模拟azure端点?,ios,azure,proxy,charles-proxy,azure-api-management,Ios,Azure,Proxy,Charles Proxy,Azure Api Management,我正在使用azure API端点…azure api.net/…。当我尝试使用Charles代理查看HTTP请求/响应时,HTTP响应为空。当我关闭代理时,请求会起作用 为了自动化测试的目的,我想拦截请求并模拟响应 我可以使用Charles proxy查看其他服务器的其他HTTPs端点。因此,我相信azure有一些特殊之处,阻止了请求的完成 Azure是如何知道中间有代理的,而不是和客户说话的? 是否需要配置azure API以允许Charles工作?(因为查看HTTP流量对于开发非常有用)
-
Azure是如何知道中间有代理的,而不是和客户说话的?
- 是否需要配置azure API以允许Charles工作?(因为查看HTTP流量对于开发非常有用)
- 是否有其他方法允许对azure的流量进行模拟?例如,主机重定向
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的截图。连接请求后没有响应
为了拦截请求并返回假响应,您可以使用 为了能够做到这一点,您应该在从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
,以测试您的应用程序是否按照您希望的方式运行。如果您在Windows平台上工作,您是否尝试过使用Fiddler()获取HTTP流量?我没有看到不能用Fiddler处理的网络流量。你用什么在你的iOS应用程序上发出请求?你能在你的代码中访问JSON响应吗?@Moxy-我们使用NSURLConnection
和AFNetworking
包装器。当Charles没有运行时,我们可以在代码中看到请求和响应。当Charles运行时,由于SSL错误导致连接失败。@astaykov-我相信Fiddler捕获的数据包不会用于SSL数据。我们需要有效地进行中间人攻击,以从SSL连接捕获数据。这就是Charles使用自签名证书所做的。但是,它不适用于此SSL连接,我不知道为什么。我认为我有解决您的问题的方法,但我需要您发布代码,说明您在何处发出网络请求,以及是什么对象发出请求,以便尽可能精确。因此,请张贴你的代码的一部分!