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

时间:2015-07-23 12:25:37

标签: ios caching nsurlconnection nsurlrequest

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

enter image description here

let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login")
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

let email2 = (viewController!.email.text as NSString).stringByReplacingOccurrencesOfString("@", withString: "%40")
let str = "name=\(email2)&pass=\(viewController!.password.text)&form_id=user_login" as NSString
let d = str.dataUsingEncoding(NSUTF8StringEncoding)
if let d2 = d {
    request.HTTPBody = d2
    let urlConnection = NSURLConnection(request: request, delegate: self)
}

更新

我已将@ teamnorge的代码放入操场并进入空的单视图应用程序项目。项目中返回的HTML包含Oops子字符串,在游乐场中使用的代码不包含它,任何想法是什么,为什么同一个请求产生不同的HTML结果?我也从iOS设备和模拟器收到failed消息。

更新

删除了NSURLRequest缓存,例如推荐的here,但仍未按预期工作。并here

更新

尝试删除here等所有凭据,但没有帮助,找不到凭据。

1 个答案:

答案 0 :(得分:2)

看起来当您收到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()