Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLRequest产生的结果与HTTP代理客户端不同_Ios_Caching_Nsurlconnection_Nsurlrequest - Fatal编程技术网

Ios NSURLRequest产生的结果与HTTP代理客户端不同

Ios NSURLRequest产生的结果与HTTP代理客户端不同,ios,caching,nsurlconnection,nsurlrequest,Ios,Caching,Nsurlconnection,Nsurlrequest,我使用NSURLRequest+NSURLConnection从HTTP代理客户端发送相同的HTTP消息,并返回不同的结果。这是一个身份验证请求。接受来自HTTP代理的身份验证请求,但不从应用发送。为什么?接受意味着重定向后HTML将不包含Oops子字符串 更新 我已经把@teamnorge下面的代码放进了游乐场和一个空的单视图应用程序项目中。项目中返回的HTML包含Oops子字符串,游乐场中使用的代码不包含它,知道发生了什么吗,为什么相同的请求会产生不同的HTML结果?我还从iOS设备和模拟

我使用
NSURLRequest
+
NSURLConnection
从HTTP代理客户端发送相同的HTTP消息,并返回不同的结果。这是一个身份验证请求。接受来自HTTP代理的身份验证请求,但不从应用发送。为什么?接受意味着重定向后HTML将不包含
Oops
子字符串

更新 我已经把@teamnorge下面的代码放进了游乐场和一个空的单视图应用程序项目中。项目中返回的HTML包含
Oops
子字符串,游乐场中使用的代码不包含它,知道发生了什么吗,为什么相同的请求会产生不同的HTML结果?我还从iOS设备和模拟器中获得了
失败
消息

更新 已删除建议的
NSURLRequest
缓存,但仍不能按预期工作。和

更新
尝试删除所有凭据,如,但没有帮助,未找到任何凭据。

当您收到HTTP 302和新位置URL时,iOS会根据此URL自动获取页面,因此我猜您的响应实际上是重定向页面的HTML内容。请核实

更新:

import UIKit
import XCPlayground

let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login")
let request = NSMutableURLRequest(URL: url!)
let str = "name=kukodajanos%40icloud.com&pass=jelszo&form_id=user_login" as  NSString
let d = str.dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = d
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

NSURLConnection.sendAsynchronousRequest(request, queue:     NSOperationQueue.currentQueue()) { response, maybeData, error in
   if let data = maybeData {
       let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
       println(contents)

            if contents!.rangeOfString("Oops").length == 0 {

                println("success")
            } else {
                println("failed")
            }
   } else {
       println(error.localizedDescription)
   }
}

XCPSetExecutionShouldContinueIndefinitely()

部分您是对的,iOS自动重定向请求,但结果页面与我在代理客户端中得到的页面不同,iOS将返回失败的身份验证消息,代理成功消息我冒昧地使用了您的凭据,并从我的游乐场发布了数据,唯一的区别是web登录重定向到/challenge和ios登录重定向到/user。其余的似乎没问题,请参阅上面帖子中的我的代码。使用了你的代码,发现了一个非常奇怪的效果,在操场上它返回
成功
,但在应用程序中它返回
失败
,知道为什么吗?@János,这很奇怪,但是,您可以将要运行url请求的
队列
current
更改为
main
NSOperationQueue.mainQueue()
并将
dispatch\u main()
添加到您的主函数中,您是否看到任何差异?这不是一个真正的答案,只是为了理解找到解决方案有什么问题。如果我是你,我可能会从截图中删除你的电子邮件/密码一个可能会测试身份验证请求,它是故意的谢谢你的帮助,问题不同,调用了两个不同的url:-(
import UIKit
import XCPlayground

let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login")
let request = NSMutableURLRequest(URL: url!)
let str = "name=kukodajanos%40icloud.com&pass=jelszo&form_id=user_login" as  NSString
let d = str.dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = d
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

NSURLConnection.sendAsynchronousRequest(request, queue:     NSOperationQueue.currentQueue()) { response, maybeData, error in
   if let data = maybeData {
       let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
       println(contents)

            if contents!.rangeOfString("Oops").length == 0 {

                println("success")
            } else {
                println("failed")
            }
   } else {
       println(error.localizedDescription)
   }
}

XCPSetExecutionShouldContinueIndefinitely()